C++11
기능이 필요하고 대상 컴퓨터에 설치된 것보다 최신 버전이 필요한 프로그램을 컴파일하려고 합니다 . 그래서 boost
모든 종속성과 binutils의 트리 내 빌드를 사용하여 gcc 4.9
일부 로컬 디렉토리()에 컴파일하고 설치했습니다. /secured/local
그런 다음 Install Boost를 다운로드하여 boost 1.55
실행했습니다 ./boostrap.sh --prefix=/secured/local && ./b4 install
. 두 컴파일 모두 잘 실행되고 gcc -std=c++11
작동합니다.
FindXX.cmake
내 프로그램은 cmake와 파일을 찾는 일반적인 프로세스를 사용하여 구축되었습니다. 나는 다음과 같이 cmake를 실행합니다.
cmake ../source/ -DBOOST_ROOT=/secured/local -DCMAKE_EXE_LINKER_FLAGS='-Wl,-rpath,/secured/local/lib'
새로 설치된 부스트와 새 버전의 gcc를 성공적으로 찾았습니다. 컴파일과 링크 모두 완벽하게 작동합니다. 그러나 프로그램을 실행하는 동안 다음 오류가 발생합니다.
$ ./surface
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /secured/local/lib/libconfig++.so.9)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_filesystem.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
objdump
향상된 디스플레이에서 실행
objdump -x /secured/local/lib/libboost_program_options.so.1.55.0 | grep stdc++
NEEDED libstdc++.so.6
required from libstdc++.so.6:
/usr/lib64/libstdc++.so.6
두 부스트 라이브러리 모두 이 작업을 수행 하려는 것 같습니다 /secured/local/lib
. 내 프로그램에서 내가 뭘 잘못하고 있는 걸까요?
나는 이것을 어딘가에 설정하지 않으려고 노력합니다 LD_LIBRARY_PATH
.
답변1
설치는 합계 에 gcc
를 libstdc++.so.6
넣 습니다 . 후자를 부스트로 사용하여 내 프로그램이 문제를 해결했습니다. 전자만 사용하면 시스템이 롤백됩니다 .$PREXIF/lib
$PREFIX/lib64
RPATH
libstdc++.so.6