簡體   English   中英

CMake:將 libgcc 和 libstdc++ 靜態鏈接到共享庫中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM