2016-08-01 205 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有點混亂,但... –