如何强制Boost使用rpath?

时间:2010-08-07 18:49:38

标签: boost bjam boost-bjam

我必须在“通常”目录树之外构建Boost(即/custom/dir而不是/usr),这不是一个问题:只需将--prefix=/custom/path传递给{ {1}} / ./runscript.sh,然后你就去了。

或者我想。

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

我的应用程序 - 关联这些-Wl,-rpath Boost库 - 已经在/custom/path阶段失败,因为./configure无法找到libboost_filesystem.so即使我已通过 libboost_system.so到我自己的编译器行(即Boost库的正确路径,我仔细检查-Wl,-rpath=/custom/path/boost/lib是否存在)。

现在,为了避免像设置libboost_system.so这样的繁琐方法,我想以某种方式构建Boost,以便所有Boost库都有编译到其中的其他Boost库的正确搜索路径。但是,我无法找到适当的程序。有人能帮助我吗?

2 个答案:

答案 0 :(得分:6)

你可以添加编译器&从命令行构建期间的链接选项:

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

Boost Build文档中有一个FAQ项目(参见B2 docs)。

答案 1 :(得分:6)

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

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

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

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