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

标签 c++ gcc load runtime-error

我有两个使用不同 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++

现在:

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

  2. 这样做有什么弊端吗?

最佳答案

链接时指定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/

相关文章:

c++ - 使用迭代器打印列表

c++ - 当我们在 C++ 的参数中传递它们时,如何修改一些数组而不修改其他数组?

c++ - 未收到 Poco::Net::HTTPClientSession json 数据内容类型

c++ - 如何避免.exe被杀毒软件识别为 "File might be dangerous"?

android - 未知使用 FFMPEG 存储大小为 'dstFormat' 构建 PJSIP 时出错

c - 为什么 gcc 不将逗号视为序列点?

c - -Wmissing-field-initializers 何时触发警告?

javascript - 我应该使用 window.load 还是 document.ready jquery

javascript - 如何加载文件夹中的所有图像?

swift - Tableview 插入行跳动