gcc 버전을 신버전으로 컴파일 하였는데요...
안녕하세요.
gcc 관련 질문인데요.
데비안 3.0 우디 리눅스 머신에 기본으로 설치된 gcc 2.95.4 가 설치 되어 있습니다. 개발 서버로 사용하다보니 이런저런걸 항상 컴파일 하는데요.
컴파일러 자체 버그가 발생하여 찾아보니 2.95 대 버전에 버그 리포터가 있어
서 버전을 업그레이드 하려고 gcc.gnu.org 에서 최신 릴리즈 소스 버전
gcc 3.3.2 를 다운받아 완전 새로운 디렉토리(/usr/local/)에 컴파일 하였습니다.
컴파일은...
./configure --prefix=/usr/local
make
make install
위와같이 그냥 이렇게 컴파일 하였습니다. 컴파일은 아무 문제없이 잘 되었는데요...
그런데 프로그래밍시 인클루드 하여 사용되는 자체 함수 라이브러리 파일들이
있잔아요.
예를들어 stdio.h 같은 파일들이 기본적으로 2.95.4 버전에서는
/usr/include 밑에 모두 있습니다..
그런데 새로 설치 후 부터는 gcc 나 g++ 컴파일러 명령들이
/usr/local/gcc-3.3.2/bin/ 디렉토리 밑에 있는 실행파일을 사용하면 3.3.2 버
전으로 컴파일은 되는데요..
기존 인클루드 파일은 여전히 /usr/include 디렉토리 밑에 것을 사용하는지 아
니면 현제 어떤 디렉토리, 즉 어떤 버전의 라이버러리 파일들걸 인클
루드하여 사용하는지 알수 없을까요??
현제 프로그래밍 소스가 STL 을 지원해야 되서 g++ 로 컴파일 해야 하거든요.
/usr/local/gcc-3.3.2/include/c++/3.3.2 이 디렉토리에 3.3.2 버전의 g++ 라이브러리파일들이 있거든요..
이 디렉토리의 라이브러리를 사용 하려면 컴파일시 따로 옵션을 지정해 줘야
하는건가요?? 아니면 어떻게 처리 해야 하는지 궁금합니다...
현제 그냥 컴파일하면 STL 구문에서 에러가 나네요...
아무래도 g++ 관련 라이브러리가 링크가 제데로 안되는거 같거든요 .ㅡㅡ;
몇몇 예상되는 문제는 다음과 같습니다.1.gcc 설치후 hea
몇몇 예상되는 문제는 다음과 같습니다.
1.
gcc 설치후 header 를 조정해야합니다.
/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/install-tools/fixinc.sh
이 프로그램을 통해서 설치후 한번 정도 돌려줘야합니다.
2.
stl의 경우 2.x 와 3.x에서는 name mangling이 다르기 때문에 라이브러리를
같이 쓸 수가 없습니다. 따라서 문제는 두 종류로 나뉠 수 있는데
한가지는 include 경로에 2.95 의 header를 사용하는 것과, 다른 한가지는 2.95로 컴파일된 라이브러리가 사용된다는 것입니다.
이 문제는 gcc option에 -v 를 넣어 어떤 include 경로가 컴파일에 참여하는지 알아보시고, gcc -print-search-dirs 로 library 경로를 확인해보세요.
---
http://coolengineer.com
답변 감사드립니다..
궁금한사항이 쪼매 더 있어서요~~
아래와같이 말씀하셨는데요..
이 프로그램이 말씀 해주신 디렉토리에 있습니다.
해당 파일을 실행을 하게되면 아래와 같이 뭔가의 옵션이 필요한거 같은데??
./fixinc.sh
fixincludes: no output directory specified
어떤 식으로 옵션을 붙여야 하는지요???
말씀해 주신 대로....
# gcc -print-search-dirs
명령어를 실행하면 아래와 같이 나타납니다...
현제 문제시 되는것이 해당 STL 라이버러리를 찾을수 없다고 나오는데요.
이걸 설치시 --prefix=/usr/local/ 밑에 설치 하지 말고
옵션 없이 설치하면 어떻게 되나요??
중복 된다던가 엉켜서 오히려 문제가 더 커지는건 아닌지 해서요??
답변 부탁 드립니다...
-
댓글 달기