簡體   English   中英

cmake:如何使用靜態鏈接的boost(或嵌入boost)創建庫

[英]cmake: how to create library with statically linked boost (or embed boost)

我想構建內部使用boost(特別是boost :: asio)的庫(例如,“靜態”或“共享”“ mylib”並不重要)。 庫公共接口不依賴任何提升類型。

庫應該由Qt應用程序使用,並且我不想將任何boost依賴項引入到應用程序的構建腳本中(當前它使用qmake),並且我需要“ mylib”成為唯一的依賴項。 庫構建系統是CMake。 我嘗試使用靜態鏈接的boost構建共享庫,但出現以下錯誤:

/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libboost_system.a(error_code.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/lib/x86_64-linux-gnu/libboost_system.a: error adding symbols: Bad value

主要目標目標/工具鏈是gcc x64(Linux),但最好擁有跨平台解決方案(至少是mingw64和MacOS X)。

創建靜態庫也是一種選擇,但是我不知道如何將靜態Boost庫包含到“ mylib”中

您不能使用為動態庫中的靜態庫構建的代碼。 共享庫需要與位置無關的代碼。 您可以獲取用於構建Boost共享庫的目標文件,並將它們全部塞入.a文件中並使用它。 或修改您的Boost構建以將-fPIC添加到標志中以編譯其靜態庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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