如何指定要使用的 libstdc++.so.6

jan*_*ver 5 libraries gcc linker cmake

我正在尝试编译我的程序,该程序需要C++11功能和boost比目标机器上安装的更新版本。因此,我使用所有依赖项和 binutils 的树内构建编译并安装gcc 4.9到某个本地目录 ( /secured/local)。然后我下载boost 1.55并运行./boostrap.sh --prefix=/secured/local && ./b4 install安装boost。两种编译都运行良好,gcc -std=c++11也运行良好。

我的程序是使用 cmake 和FindXX.cmake查找文件的常用程序构建的。我正在像这样运行 cmake:

cmake ../source/ -DBOOST_ROOT=/secured/local -DCMAKE_EXE_LINKER_FLAGS='-Wl,-rpath,/secured/local/lib'
Run Code Online (Sandbox Code Playgroud)

它成功地找到了我的新 boost 安装和新版本的 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)
Run Code Online (Sandbox Code Playgroud)

运行objdump升压节目

objdump -x /secured/local/lib/libboost_program_options.so.1.55.0 | grep stdc++
  NEEDED               libstdc++.so.6
  required from libstdc++.so.6:
Run Code Online (Sandbox Code Playgroud)

看起来好像两个 boost 库都尝试使用旧的/usr/lib64/libstdc++.so.6而不是/secured/local/lib. 我在程序中做错了什么?

请注意,我尽量避免在LD_LIBRARY_PATH某处设置。

jan*_*ver 10

安装gcc将 alibstdc++.so.6放入$PREXIF/lib$PREFIX/lib64。使用后者作为RPATH提升,我的程序解决了这个问题。仅使用前者会导致退回到系统libstdc++.so.6