[英]CMake: Linking statically against libgcc and libstdc++ into a shared library
問題:
我在 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")
並再次使用
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
文檔:
指定鏈接給定目標時要使用的庫或標志。
以 - 開頭但不以 -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...] ...])
指定要鏈接的庫的適當方法仍然是:
https://cmake.org/cmake/help/v3.13/command/target_link_libraries.html
target_link_libraries(<target>
<PRIVATE|PUBLIC|INTERFACE> <item>...
[<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
根據您是否希望將這些庫傳播到相關目標,有幾種不同的簽名,因此請務必查看文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.