cmake:如何使用静态链接的boost(或嵌入式boost)创建库

时间:2016-05-20 13:16:21

标签: c++ qt boost cmake

我想在内部使用boost(特别是boost :: asio)构建库(说" mylib",静态或共享,并不重要)。库公共接口并不依赖于任何提升类型。

库应该被Qt应用程序使用,我不想在应用程序的构建脚本中引入任何提升依赖项(它目前使用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)。

创建静态库也是一种选择,但我无法弄清楚如何将静态增强库包含到" mylib"

1 个答案:

答案 0 :(得分:1)

您不能在动态库中使用为静态库构建的代码。共享库需要与位置无关的代码。您可以获取用于构建Boost共享库的目标文件,并将它们全部填充到.a文件中并使用它。或者使用Boost构建来将-fPIC添加到标志中以编译其静态库。