11

我必须在“通常的”目录树之外构建 Boost(即,/custom/dir而不是/usr),这不是什么大问题:只需传递--prefix=/custom/path./runscript.sh/ ./bjam,就可以了。

或者我是这么想的。

问题是一些 Boost 库相互依赖,并且 - 使用通过./bootstrap.sh/的默认构建过程./bjam- 似乎该--prefix路径没有添加到 Boost 库的库搜索路径中,即没有-Wl,-rpath应用。这意味着依赖于其他 Boost 库的 Boost 库在运行时无法找到它们。

我的应用程序 - 链接那些/custom/pathBoost 库 - 在阶段已经失败,./configure因为libboost_filesystem.socannot find libboost_system.so即使我传递-Wl,-rpath=/custom/path/boost/lib给我自己的编译器行(即 Boost 库的正确路径,我仔细检查了libboost_system.so那里)。

现在,为了避免像设置这样的笨拙方法LD_LIBRARY_PATH,我想以某种方式构建 Boost,以便所有 Boost 库都具有编译到其中的其他 Boost 库的正确搜索路径。但是,我找不到合适的程序。有谁能够帮我?

4

2 回答 2

12

我最近需要为另一个项目执行此操作,尽管我需要使用 $ORIGIN 使路径相对于 boost 的共享对象的位置。

这需要在 bash 命令行上执行以下操作:

./b2 hardcode-dll-paths=true dll-path="'\$ORIGIN/../lib'" --prefix=$MY_PREFIX install

找出神奇的字符集合以使 $ORIGIN 正确放置在共享对象中需要一些试验和错误,所以我希望在这里写下答案可以帮助其他人避免摸索这个问题。

于 2018-04-26T13:27:57.713 回答
6

您可以在构建期间从命令行添加编译器和链接选项:

bjam hard-code-dll-path=true dll-path=/custom/path

Boost Build 文档中有一个关于此的常见问题解答项目(请参阅B2 文档)。

于 2010-08-07T22:29:15.400 回答