我有两个使用不同 gcc 版本生成的可执行文件
一个是使用 gcc 3.4.2
,另一个是在我的 Linux 机器中使用 gcc 4.3.2
两者都必须在相同的环境中运行,即具有相同的 LD_LIBRARY_PATH。
4.3.2
的当前路径位于 3.4.2
之前,3.4.2
出错。
libstdc++.so.6:找不到版本“GLIBCXX_3.4.9”(../../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++
现在:
我想知道是否有其他方法可以实现。
这样做有什么弊端吗?
最佳答案
链接时指定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
来检查是否找到了正确的库。
关于c++ - 如何在同一系统中运行两个使用不同 gcc 版本生成的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11735118/