DA-*_*A-- 16 c++ gcc g++ cmake static-linking
问题:
我在我的Ubuntu 16.04安装上使用CMake和GCC4.9将glibcc/glibc ++链接到共享库时遇到问题.
附加条件:
加载共享库给出了Red Hat生产环境(我将其复制到)的问题,我相信因为它使用了不同的libstc ++版本(错误:找不到GLIBCXX_3_4_20).我没有sudo权限,无法升级机器.
正如我从这个博客派生的那篇文章,我尝试使用以下方法将静态链接与libgcc和libgc ++链接起来:
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
Run Code Online (Sandbox Code Playgroud)
和使用
set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
Run Code Online (Sandbox Code Playgroud)
但这不起作用.什么做的工作是这样的CMake的脚本:
add_library(myLib SHARED ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS " -static")
target_link_libraries(myLib -static-libgcc -static-libstdc++)
Run Code Online (Sandbox Code Playgroud)
这一定是错误的做法,据我所知-static-libgcc和-static-libstdc ++是链接器选项而不是库......
问题:如何正确地链接-libgcc和-libstdc ++?
提前致谢!
Spa*_*Bot 14
是的,target_link_libraries
是设置链接器标志或链接器选项的正确方法.
文件target_link_libraries
:
指定链接给定目标时要使用的库或标志.
以 - ,但不是-l或-framework开头的项目名称被视为链接器标志.
https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html(重点不是原文)
从 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...] ...])
Run Code Online (Sandbox Code Playgroud)
指定要链接的库的适当方法仍然是:
https://cmake.org/cmake/help/v3.13/command/target_link_libraries.html
target_link_libraries(<target>
<PRIVATE|PUBLIC|INTERFACE> <item>...
[<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
Run Code Online (Sandbox Code Playgroud)
根据您是否希望将这些库传播到相关目标,有一些不同的签名,因此请务必检查文档。
归档时间: |
|
查看次数: |
14099 次 |
最近记录: |