背景是我们的项目必须使用不同的GCC版本( ABI可能不兼容),并且我们的构建服务器中安装了多个版本的GCC。我们使用包装器项目设置LD_LIBRARY_PATH,通过export LD_LIBRARY_PATH=/path/to/gcclib/准备环境,并在包装​​器脚本中启动我们的应用程序。

由于使用了不同版本的gcc / g++,我们想知道是否有一种简单的方法来获取 libstdc++。so 所针对的隐式库路径。例如,一个GCC工具安装在/opt/gcc4/gcc4.7/bin/g++中,而libstdc++。so可以在/opt/gcc4/gcc4.7/lib/中找到,而另一个GCC变体可以找到在/ usr / local / bin / g++和/usr/lib/libstdc++.so中。

最佳答案

我想您在设置CMAKE_{C,CXX}_COMPILER vars时指定了绝对路径。在这种情况下,您可以使用它来获取库目录:

get_filename_component(GCC_PATH ${CMAKE_C_COMPILER} PATH)
#now ${GCC_PATH} contains "/opt/gcc4/gcc4.7/bin", for example
set(LIBSTD_PATH "${GCC_PATH}/../lib")

对于系统编译器,您可以使用if语句:
if(GCC_PATH STREQUAL /usr/local/bin)
set(LIBSTD_PATH "/usr/lib")
endif()

关于c++ - 如何在CMake中以可移植的方式获取libstdcxx隐式链接目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13290282/

10-11 18:13