我想构建内部使用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添加到标志中以编译其静态库。
关于c++ - cmake:如何使用静态链接的boost(或嵌入boost)创建库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37347718/