如何强制Boost使用rpath?

如何强制Boost使用rpath?,boost,bjam,Boost,Bjam,我必须在“普通”目录树之外构建Boost(即,/custom/dir而不是/usr),这不是什么大问题:只需将--prefix=/custom/path传递到/runscript.sh//bjam,就可以了 至少我是这么想的 问题是一些Boost库相互依赖,并且-使用经过/bootstrap.sh//bjam-的默认构建过程-似乎没有将--prefix路径添加到Boost库的库搜索路径中,即没有应用-Wl,-rpath。这意味着依赖于其他Boost库的Boost库在运行时无法找到它们 我的应用程

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

至少我是这么想的

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

我的应用程序-链接那些
/custom/path
Boost库-在
/configure
阶段已经失败了,因为
libboost\u文件系统。所以
找不到
libboost\u系统。所以
,即使我将
-Wl,-rpath=/custom/path/Boost/lib
传递给我自己的编译器行(即Boost LIB的正确路径,我仔细检查了
libboost\u系统。因此
在那里)


现在,为了避免像设置
LD_LIBRARY\u PATH
这样的繁重方法,我想构建Boost,使所有Boost库都能为编译到它们中的其他Boost lib找到正确的搜索路径。但是,我找不到合适的过程。有人能帮我吗?

您可以在编译过程中添加编译器和链接选项使用以下命令行从命令行生成:

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

Boost Build文档中有一个常见问题(请参阅)。

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

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

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

计算出神奇的字符集合以将$ORIGIN正确放置在共享对象中需要一些尝试和错误,因此我希望在这里写下答案可以帮助其他人避免在这方面胡乱操作。

Ahem…显然这停止了Boost 1.45.0的工作(完全相同的调用)我发现在1.45.0中没有任何相关的变化,你是否碰巧知道的比我多?HM,不知道比你做的更多。但是如果它停止工作,我会认为它是一个bug。并且应该被报告为SUCH。1.62对这个选项是可以的:<代码>硬代码DLL路径=真DLL路径= /自定义/PATS/LIB < /C>在Boost 1.69上,我需要T。o使用
hardcodel path=true
代替
hardcodel path=true
谢谢,这个答案救了我一天。事实上,它超过了最初的“正确”以帮助的方式回答。老实说,如果我没有在这里写这篇文章,我可能会忘记,并且不得不重新找出它。这样,至少当我在互联网上拼命搜索我一年或更长时间前所做的事情时,我会找到它。在新版本中,这不起作用。
dll path=“\$ORIGIN/。/lib”
将转换为
-R//../lib
而不是
-R\$ORIGIN/./lib
Wang,在Mandrake Linux系统上,我无法在bash提示符下复制boost-1.72.0的问题。您使用的是bash吗?