包括带有可执行二进制文件的Boost库



我在一个安装了Boost的系统上开发时遇到了一个问题:

/usr/include
/usr/lib

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

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

我不能改变我部署的每个系统,在同一个地方安装libboost。

有没有办法:

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

我使用g++8

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

我不知道你在这里是什么意思:

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

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

当然,情况并非经常如此。所以…

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

这在扩展时永远不会可靠工作,在CI世界中是一场噩梦。这就是像conan这样的包管理器(https://conan.io/)来拯救这一天。将包管理委托给第三方是让代码跨多个环境/平台构建的最可靠方式。

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