【问题标题】:cmake: how to create library with statically linked boost (or embed boost)cmake:如何使用静态链接提升(或嵌入提升)创建库
【发布时间】:2016-05-20 13:16:20
【问题描述】:

我想构建内部使用 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)。

创建静态库也是一种选择,但我不知道如何将静态提升库包含到“mylib”中

【问题讨论】:

标签: c++ qt boost cmake


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2011-01-31
    • 2012-06-29
    相关资源
    最近更新 更多