2009-08-06 4 views
8

gcc 3.2.3을 사용하는 공유 라이브러리를 binutils 2.18과 연결하는 데 문제가 있습니다. 섹션 .rodata에서 참조링커 오류에 대한 도움 : .gnu.linkonce.t

.gnu.linkonce.t _... : 나는 다음과 같은 오류가 라이브러리를 연결하려고하면 ... 폐기 섹션 .gnu.linkonce.t에

I 정의 이 문제에 대해 상당한 양의 인터넷 검색을 수행했으며 대부분의 장소는 2.1.5.50에서 수정 된 binutils 2.17 및 이후 버전에서 소개 된 회귀임을 나타냅니다.하지만 문제가 발생하지 않고 특정 해결 방법이 있는지 알면 궁금합니다. binutils 및 gcc를 터치합니다.

감사합니다.

답변

6

이것은 시스템이 gcc와 다른 binutils를 일치시키지 않는 이상한 결과입니다. 경로의/usr/bin 앞에/usr/local/bin이 있으므로/usr/bin/gcc를 사용하고 (3.2.3)/usr/local/bin/ld를 사용했습니다./usr/bin이 경로 앞쪽으로 바뀌었을 때 적절한/usr/bin/ld가 호출되었고 (binutils 2.14) 문제가 해결 된 것 같습니다.

0

이 버그가 발견되어 여기에보고되었습니다. GCC bugzilla은 버그를 중점적으로 다루는 작은 테스트 케이스로, 시간 낭비가 아니라는 것을 알았던 설명에 제공되었습니다. 이 버그는 GCC 3.4.6부터 수정되었습니다.

GCC 3.3.1binutils 2.15.92binutils 2.17.50과 함께 사용하는 동안이 문제가 발생했으며 두 가지 모두 작동하지 않았습니다. 그래서, 저에게 그것은 분명히 문제를 만든 GCCbinutils 버전의 혼합이 아니 었습니다.

GCC 버전을 사용해야하는 경우 H.J.에서 제공하는이 패치를 사용하고 수동으로 수행 한 다음 다시 GCC을 다시 빌드하십시오.

Fix without COMDAT group

Fix with COMDAT group

는 수정에 대한 정확한 DIFF를 보여줍니다 제공된 링크에서 attachements을 확인합니다.

나는 그것을 직접 시험해 그것을 성공적으로 수행 한 후 GCC 3.3.1에 "COMDAT 그룹없이"첫 번째 수정을 패치하고 다시 빌드 한 다음 binutils 2.15.92binutils 2.17.50과 함께 사용했습니다.