GCC 버전을 일시적으로 업그레이드하려면 CentOS 6.3 용 devtoolset-1.0을 사용하고 있습니다. 나는이가 '오래된'된 libstdC++에없는 몇 가지 새로운 기능 것을, 알아 낸CentOS : devtoolset에서 GCC 4.7을 사용하면 libstdC++가 잘못 연결됨 (정의되지 않은 기호)
$ ldd -d -r myapp
$ [..]
$ libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003216e00000)
$ [..]
$ undefined symbol: _ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_ (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base7_M_hookEPS0_ (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base9_M_unhookEv (./myapp)
:하지만, 지금 내 C++ 응용 프로그램을 컴파일 할 수 있어요하지만, 최종 바이너리 일부 기호 누락 더 새로운 libstdC++. 내 시스템에는 libstdC++ (기본 버전 4.4.7)와 devtoolset-1.0-libstdC++ - devel (devtoolset을 통한 4.7)이 모두 설치되어 있습니다. 흥미롭게도, devtoolset에서 된 libstdC++는 예전에 전년도 링크 :
는$ cat /opt/centos/devtoolset-1.0/root/usr/lib/gcc/x86_64-redhat-linux/4.7.0/libstdc++.so
$ /* GNU ld script
$ Use the shared library, but some functions are only in
$ the static library, so try that secondarily. */
$ OUTPUT_FORMAT(elf64-x86-64)
$ INPUT (/usr/lib64/libstdc++.so.6 -lstdc++_nonshared)
내가 실제로 원하는 것은 된 libstdC++ 바인딩을 교체하는 것입니다,하지만 난 그것을 달성하는 방법을 모르겠어요. 이미 LD_LIBRARY_PATH를 설정하고 devtoolset 디렉토리를 가리 키려고했지만 libstdC++는 여전히 이전 위치로 설정되었습니다. 또한 심볼릭 링크는 실제 공유 라이브러리가 아니고 ld 스크립트이기 때문에 성공하지 못했습니다.
이 문제를 해결 한 적이 있습니까? 또한 디버그 대 릴리즈 빌드에 다른 누락 된 기호가 있는지 궁금합니다. 이는 제가 관찰 한 것입니다. –