1

背景是我们的项目必须使用不同的 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中。

4

1 回答 1

1

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

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()
于 2012-11-09T06:31:14.370 回答