背景是我们的项目必须使用不同的 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
变量时指定了绝对路径。在这种情况下,您可以使用它来获取库目录:
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/