c++ - CMake:将 libgcc 和 libstdc++ 静态链接到共享库中

标签 c++ gcc cmake g++ static-linking

问题:

我在安装 Ubuntu 16.04 时使用 CMake 和 GCC4.9 将 glibcc/glibc++ 链接到共享库时遇到困难。

附加条件:

加载共享库会给 Red Hat 生产环境(我将它复制到的地方)带来问题,我相信因为它使用了不同的 libstc++ 版本(错误:未找到 GLIBCXX_3_4_20)。我没有 sudo 权限,无法升级机器。

正如我从 this 得出的那样博客,这个 post ,我尝试使用以下方法链接静态链接与 libgcc 和 libgc++:

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")

再次使用

set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")

但这不起作用。 起作用的是这个 CMake 脚本:

add_library(myLib SHARED ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS " -static")
target_link_libraries(myLib -static-libgcc -static-libstdc++)

这一定是错误的做法,据我所知 -static-libgcc 和 -static-libstdc++ 是链接器选项,而不是库...

问题: 如何正确静态链接 -libgcc 和 -libstdc++?

提前致谢!

最佳答案

是的,target_link_libraries设置链接器标志或链接器选项的正确方法。

target_link_libraries的文档:

Specify libraries or flags to use when linking a given target.

Item names starting with -, but not -l or -framework, are treated as linker flags.

https://cmake.org/cmake/help/latest/command/target_link_libraries.html (重点不在原文)

关于c++ - CMake:将 libgcc 和 libstdc++ 静态链接到共享库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694058/

相关文章:

c++ - 是否可以将基类 is struct 分配给派生类 struct

使用arm-none-eabi-gcc编译和链接库liba.a报错

c - gcc错误编译文件

android - Cmake:如何在android studio中包含.h文件并从android代码调用头文件的方法

c++ - 如何让CMake在任何地方自动添加MagickWand库链接

c++ - Visual Studio 2008 中的非托管 C++ 单元测试

c++ - OPenMP 循环增量

c++ - 确定 C++11 正则表达式匹配的位置

c++ - 具有灵活阵列成员的打包结构的可移植替代方案

cmake - 调试 CMake find_library