我有两个不同的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++
立即
我想知道是否有其他方法可以实现它。
这样做是否有任何缺点。
答案 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列出了几个选项