如何强制Boost使用rpath?

Dev*_*lar 10 boost bjam

我必须在"通常"目录树之外构建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.so无法找到libboost_system.so,即使我传递-Wl,-rpath=/custom/path/boost/lib给我自己的编译器行(即Boost库的正确路径,我仔细检查了libboost_system.so那里).

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

Gra*_*bot 6

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

bjam hard-code-dll-path=true dll-path=/custom/path
Run Code Online (Sandbox Code Playgroud)

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

  • 咳......显然这已经停止了Boost 1.45.0(完全相同的调用).我在1.45.0中找不到任何相关的变化; 偶然的事情比我知道的更多吗? (2认同)
  • 1.62 可以使用此选项:`hardcode-dll-paths=true dll-path=/custom/path/lib` (2认同)

Jos*_*per 6

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

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

./b2 hardcode-dll-paths=true dll-path="'\$ORIGIN/../lib'" --prefix=$MY_PREFIX install
Run Code Online (Sandbox Code Playgroud)

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