사용할 libstdc++.so.6을 지정하는 방법

사용할 libstdc++.so.6을 지정하는 방법

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

설치는 합계 에 gcclibstdc++.so.6넣 습니다 . 후자를 부스트로 사용하여 내 프로그램이 문제를 해결했습니다. 전자만 사용하면 시스템이 롤백됩니다 .$PREXIF/lib$PREFIX/lib64RPATHlibstdc++.so.6

관련 정보