首页 > 解决方案 > 包含带有可执行二进制文件的 Boost 库

问题描述

我有一个问题,我正在一个安装了 Boost 的系统上进行开发:

/usr/include
/usr/lib

在我将部署它的系统上,libboost 库位于:

/nfs/mount/boost
/nfs/mount/lib

而且我无法更改我部署的每个系统以在同一个地方安装 libboost。

有没有办法:

  1. 包括 libboost 作为二进制可执行文件的一部分,这样就不需要从系统 lib 路径加载。
  2. 尝试加载到 libboost 时让可执行文件搜索不同的目录?

我正在使用 g++ 8

标签: c++boostg++

解决方案


听起来您需要一个更复杂的构建环境。

我不确定你在这里的意思:

  1. 包括 libboost 作为二进制可执行文件的一部分,这样就不需要链接

链接不是您可以跳过的。如果您试图避免将.dll/ .so 文件与可执行文件一起分发,则需要避免使用需要编译 boost 二进制文件的 boost 库部分(即此处未列出的那些https://www.boost.org /doc/libs/1_62_0/more/getting_started/windows.html#header-only-libraries)。

当然,这种情况并不常见。所以...

  1. 尝试链接到 libboost 时使可执行文件搜索不同的目录?

随着您的扩展,这永远不会可靠地工作,并且是 CI 世界的噩梦。这就是 conan ( https://conan.io/ ) 等包管理器来拯救这一天的地方。将包管理委托给第三方是让您的代码跨多个环境/平台构建的最可靠方法。

此外,构建可执行文件和分发它是单独的操作。任何动态链接的库都需要在运行时在系统路径上被发现。


推荐阅读