我在一个安装了Boost的系统上开发时遇到了一个问题:
/usr/include
/usr/lib
在我将要部署的系统上,libboost库位于:
/nfs/mount/boost
/nfs/mount/lib
我不能改变我部署的每个系统,在同一个地方安装libboost。
有没有办法:
- 将libboost作为二进制可执行文件的一部分,这样就不需要从系统lib路径加载
- 在尝试加载到libboost时,让可执行文件搜索不同的目录
我使用g++8
听起来您需要一个更复杂的构建环境。
我不知道你在这里是什么意思:
- 将libboost作为二进制可执行文件的一部分,这样就不需要链接
链接不是可以跳过的。如果您试图避免将.dll/.so文件与可执行文件一起分发,则需要避免使用boost库中需要编译boost二进制文件的部分(即此处未列出的部分https://www.boost.org/doc/libs/1_62_0/more/getting_started/windows.html#header-只有库(。
当然,情况并非经常如此。所以…
- 在尝试链接到libboost时让可执行文件搜索不同的目录
这在扩展时永远不会可靠工作,在CI世界中是一场噩梦。这就是像conan这样的包管理器(https://conan.io/)来拯救这一天。将包管理委托给第三方是让代码跨多个环境/平台构建的最可靠方式。
此外,构建可执行文件和分发可执行文件是单独的操作。任何动态链接的库都需要在运行时在系统路径上是可发现的。