2016-08-01 166 views
7

问题:CMake的:静态链接libgcc的和libstdC++到一个共享库

我有联glibcc/glibc的++到使用CMake和GCC4.9在我的Ubuntu 16.04安装的共享库的问题。

附加条件:

加载共享库给OM红帽生产环境中的问题(在这里我把它复制到),我相信,因为它使用了不同的libstC++版本(错误:GLIBCXX_3_4_20未找到) 。我没有sudo权限,无法升级机器。

当我从this博客衍生,这post,我尝试使用链接libgcc的和libgc静态链接++:

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

和againg使用

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++?

在此先感谢!

回答

7

是的,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/v3.0/command/target_link_libraries.html(重点不是原件)

+0

谢谢!好的,我应该更好地阅读手册...我认为名称target_link_libraries有点混乱,但... –