如何在同一系统中运行使用不同gcc版本生成的两个可执行文件

时间:2012-07-31 07:22:41

标签: c++ gcc load runtime-error

我有两个不同的gcc版本生成的可执行文件 一个是在我的Linux框中使用gcc 3.4.2和另一个使用gcc 4.3.2

两者都必须在相同的环境中运行,即具有相同的 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. 这样做是否有任何缺点。

2 个答案:

答案 0 :(得分: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检查是否正在查找是否找到了正确的库。

答案 1 :(得分:0)

libstdc++ manual列出了几个选项