2012-07-27 2 views
2

두 버전 (ght이이 정보를 제공) 간의 g ++의 암시 적 LIBRARY_PATH 수정에 문제가 있습니다. LIBRARY_PATH를 사용자 정의 라이브러리가있는 단일 로컬 디렉토리로 설정합니다. 그러나 g ++의 한 버전 (버전 A라고 함)이 올바르게 링크 된 것으로 밝혀졌으며, 다른 버전 (버전 B)이 시스템 기본값에 링크되었으므로 바람직하지 않습니다. 외관상으로, 전화 번호부의 순서는 뒤섞이고 나의 명세는 적당하게 존중되지 않았다. 이 버전과 호환되지는 않지만 LIBRARY_PATH not used before /usr/lib anymore in gcc 4.2 and later?과 (와) 비슷한 문제입니다.gcc 사양 파일 줄 디코딩

어쨌든 나는 두 개의 다른 버전의 사양 파일을 살펴볼 생각이 들었다 (g++ -dumpspecs > specs을 통해 얻음). 그런 다음 다른 버전 (A)의 specs 파일과 함께 g ++ (B; * un * 예상 수정본을 생성)의 버전을 실행하는 것이 여전히 수정을 내고 LIBRARY_PATH가 이제는 그대로 사용하는 지 확인하려고했습니다. 나는 그것을 (예상 버전 A)!

본인은 다음 줄에 일어날 이상한 수정의 위치를 ​​추적 :

. !m64 !m32;.:../lib64 m64 !m32;.:../lib32 !m64 m32; 

LIBRARY_PATH의 설정/수정에 영향을 미치는 것으로 나타나는 게다가, 나는 슬프게도이 행이 무엇을 의미하는지 단서가 없다. 그러므로 여러분 중 일부가이 줄을 "해독하여"의미가 무엇인지 설명하여 내 요구 사항에 따라 수정할 수 있기를 바랍니다.

감사합니다.

답변

3

는 그 라인이 라이브러리는 GCC의 $PREFIX/lib 디렉토리를 기준으로 발견되는 방법에 영향을

이 세 부분이 있습니다 ($PREFIX 디렉터리 GCC가에 설치되어 있습니다.) :

$PREFIX/lib/. 사용 때 어느 -m32 또는 -m64이 명령 줄에서 사용됩니다.

$PREFIX/lib/.:$PREFIX/lib/../lib64-m64이 사용될 때 사용됩니다.

$PREFIX/lib/.:$PREFIX/lib/../lib32-m32이 사용될 때 사용됩니다.

이것은 데비안이나 우분투를 사용하고 있다는 것을 의미합니다. FSF 소스의 바닐라 GCC 빌드가 스펙에 포함되어 있다고 생각하지 않습니다. 두 가지 GCC 버전이 모두 .deb 패키지였습니까? 아니면 직접 설치 했습니까? (최근 데비안/우분투 멀티 아치 지원은 이동 라이브러리 디렉토리를 해제하고 그래서 데비안과 우분투가 .deb 패키지의 GCC 코드를 패치 생각, 바닐라 GCC를 나누기.)

당신이 각각 g++ -v와 연결의 출력을 추가 할 수 있습니다 각 버전에서 사용되는 정확한 라이브러리 검색 경로를 보려면 버전을 선택하십시오.

또한 LIBRARY_PATH 대신 -L을 사용하지 않는 이유는 무엇입니까? -L으로 지정된 디렉토리는 시스템 디렉토리 또는 GCC의 고유 디렉토리 또는 LIBRARY_PATH에 지정된 디렉토리보다 항상 먼저옵니다.

+0

감사합니다. 매우 도움이 될 것입니다. g ++ ver. A는 실제로 데비안에서 제공되는 시스템 전체의 컴파일러입니다. 다른 하나 (버전 B)에는 다중 사용자 시스템에서 설치 및 버전 처리를 관리하는 데 사용되는 easybuild라는 시스템이 있습니다 (잠재적으로 상당히 다른 도구 및 버전 필요). 나는 전반적인 설정이이 사이트에 매우 구체적이라고 생각한다. 그래서 나는 거기에 자세히 들어가고 싶지 않았다."-L"을 사용하고 싶지 않습니다. (정의에 따라) 명시 적으로 설정해야하며 "안전한"기본 연결을 보장하기 위해 "LIBRARY_PATH"를 사용하는 것이 일반적이고 투명한 솔루션이라고 생각했습니다. – Shadow

+0

데비안 제공 GCC는 라이브러리 검색 경로를 변경하는 패치로 구축됩니다. http://anonscm.debian.org/viewvc/gcccvs/branches/sid/gcc-4.6/debian/patches/gcc-multiarch.diff?revision=5904&view=markup 및 http://anonscm.debian.org/viewvc/ gcccvs/branches/sid/gcc-4.6/debian/patches/gcc-multilib64.diff? revision = 4969 & view = 마크 업 –