问题:
在我的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 ++?
提前致谢!
答案 0 :(得分:10)
是的,target_link_libraries
是设置链接器标志或链接器选项的正确方法。
target_link_libraries
的文档:
指定链接给定目标时要使用的库或标记。
以 - ,但不是-l或-framework开头的项目名称被视为 链接器标志。
https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html(强调不是原创)
答案 1 :(得分:2)
从cmake 3.13开始,对于常规的链接器选项,有一个新的cmake函数:
https://cmake.org/cmake/help/v3.13/command/target_link_options.html
target_link_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定要链接的库的适当方法仍然是:
https://cmake.org/cmake/help/v3.13/command/target_link_libraries.html
target_link_libraries(<target>
<PRIVATE|PUBLIC|INTERFACE> <item>...
[<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
有几种不同的签名,具体取决于您是否希望将这些库传播到相关的目标,因此请务必检查文档。