gcc 버전을 신버전으로 컴파일 하였는데요...

goldedit의 이미지

안녕하세요.

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++ 관련 라이브러리가 링크가 제데로 안되는거 같거든요 .ㅡㅡ;

pynoos의 이미지

몇몇 예상되는 문제는 다음과 같습니다.

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 경로를 확인해보세요.

goldedit의 이미지

궁금한사항이 쪼매 더 있어서요~~
아래와같이 말씀하셨는데요..

Quote:

1. gcc 설치후 header 를 조정해야합니다.
/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/install-tools/fixinc.sh

이 프로그램을 통해서 설치후 한번 정도 돌려줘야합니다.

이 프로그램이 말씀 해주신 디렉토리에 있습니다.
해당 파일을 실행을 하게되면 아래와 같이 뭔가의 옵션이 필요한거 같은데??
./fixinc.sh
fixincludes: no output directory specified
어떤 식으로 옵션을 붙여야 하는지요???

Quote:

2. stl의 경우 2.x 와 3.x에서는 name mangling이 다르기 때문에 라이브러리를 같이 쓸 수가 없습니다. 따라서 문제는 두 종류로 나뉠 수 있는데
한가지는 include 경로에 2.95 의 header를 사용하는 것과, 다른 한가지는 2.95로 컴파일된 라이브러리가 사용된다는 것입니다.

이 문제는 gcc option에 -v 를 넣어 어떤 include 경로가 컴파일에 참여하는지 알아보시고, gcc -print-search-dirs 로 library 경로를 확인해보세요.

말씀해 주신 대로....
# gcc -print-search-dirs
명령어를 실행하면 아래와 같이 나타납니다...

Quote:

TestServer:~# gcc -print-search-dirs
install: /usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/
programs: =/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/:/usr/bin/../lib/gcc-lib/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/:/usr/lib/gcc/i686-pc-linux-gnu/3.3.2/:/usr/lib/gcc/i686-pc-linux-gnu/:/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/i686-pc-linux-gnu/3.3.2/:/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/i686-pc-linux-gnu/3.3.2/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/
libraries: =/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/:/usr/bin/../lib/gcc-lib/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/:/usr/lib/gcc/i686-pc-linux-gnu/3.3.2/:/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/lib/i686-pc-linux-gnu/3.3.2/:/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/lib/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/lib/i686-pc-linux-gnu/3.3.2/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/lib/:/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../i686-pc-linux-gnu/3.3.2/:/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../i686-pc-linux-gnu/3.3.2/:/usr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../:/lib/i686-pc-linux-gnu/3.3.2/:/lib/:/usr/lib/i686-pc-linux-gnu/3.3.2/:/usr/lib/
TestServer:~#

현제 문제시 되는것이 해당 STL 라이버러리를 찾을수 없다고 나오는데요.
이걸 설치시 --prefix=/usr/local/ 밑에 설치 하지 말고
옵션 없이 설치하면 어떻게 되나요??
중복 된다던가 엉켜서 오히려 문제가 더 커지는건 아닌지 해서요??
답변 부탁 드립니다...

-

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.