我必须在“通常”目录树之外构建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库的正确搜索路径。但是,我无法找到适当的程序。有人能帮助我吗?
答案 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正确放置在共享对象中需要一些试验和错误,所以我希望在这里写答案可以帮助其他人避免摸索。