1

我有两个使用不同 gcc 版本生成的可执行文件,一个正在使用gcc 3.4.2,另一个gcc 4.3.2在我的 Linux 机器中使用

两者都必须在相同的环境中运行,即具有相同的LD_LIBRARY_PATH

当前的路径4.3.2放置在3.4.2给出3.4.2错误之前。

libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by../../src/hello)

我正在考虑一种解决方案,我可以将信息存储在 exe 中以查找所需的加载时间文件。

我在下面创建了有问题的构建脚本:

基本上 O3 选项正在优化。

/opt/gcc-4.3.2/bin/g++ -pipe -O3 -c hello4_3_2.cpp
/opt/gcc-4.3.2/bin/g++ -o hello4_3_2 hello4_3_2.o -L$/opt/gcc-4.3.2/lib64/libstdc++

/opt/gcc-3.4.2/bin/g++ -pipe -O3 -c hello3_4_2.cpp
/opt/gcc-3.4.2/bin/g++ -o hello3_4_2 hello3_4_2.o -L$/opt/gcc-3.4.2/lib64/libstdc++

下面的脚本适用于我:(没有 O3 选项)

/opt/gcc-4.3.2/bin/g++ -pipe  -c hello4_3_2.cpp
/opt/gcc-4.3.2/bin/g++ -o hello4_3_2 hello4_3_2.o -L$/opt/gcc-4.3.2/lib64/libstdc++

/opt/gcc-3.4.2/bin/g++ -pipe  -c hello3_4_2.cpp
/opt/gcc-3.4.2/bin/g++ -o hello3_4_2 hello3_4_2.o -L$/opt/gcc-3.4.2/lib64/libstdc++

现在:

  1. 我想知道是否有其他方法可以实现它。

  2. 这样做有什么缺点吗。

4

2 回答 2

3

链接时指定一个rpath

/opt/gcc-4.3.2/bin/g++ -o hello4_3_2 hello4_3_2.o -Wl,-rpath,/opt/gcc-4.3.2/lib64
#                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这会将库搜索路径硬编码到可执行文件中。

您可以ldd ./hello4_3_2在不运行的情况下检查是否找到了正确的库。

于 2012-07-31T07:24:40.027 回答
0

libstdc++ 手册列出了几个选项

于 2012-07-31T12:14:03.840 回答