0

当我尝试用它编译一个 exec 时,b2 toolset=clang它使用如下链接命令:

clang++ -L/apps/bzip2/lib -L/apps/zlib/lib -o fixfast/bin/clang-linux-3.3/release/link-static/fixfast-mds_MCAST fixfast/bin/clang-linux-3.3/release/link-static/fixfastDataD.o /apps/boost/root/bin.v2/libs/date_time/build/clang-linux-3.3/release/link-static/libboost_date_time.a ~/infra_install/lib/libfixfast.a ~/infra_install/lib/libCDef.a -lbz2 -lz -lpthread

并且在 boost 中出现一长串未定义的引用而失败,而以下重新排序的版本可以很好地链接:

clang++ -L/apps/bzip2/lib -L/apps/zlib/lib -o fixfast/bin/clang-linux-3.3/release/link-static/fixfast-mds_MCAST fixfast/bin/clang-linux-3.3/release/link-static/fixfastDataD.o ~/infra_install/lib/libfixfast.a ~/infra_install/lib/libCDef.a /apps/boost/root/bin.v2/libs/date_time/build/clang-linux-3.3/release/link-static/libboost_date_time.a  -lbz2 -lz  -lpthread

我相信我指定 on 的链接依赖的libCDef方式/boost/date_time//boost_date_time可能不足以在链接期间获得正确的顺序。

CDef/果酱根:

project : usage-requirements <include>~/infra_install ;

lib CDef 
  : [ glob *.cpp ] 
  : 
  <library>/boost/date_time//boost_date_time
  <library>/boost/filesystem//boost_filesystem
  <library>/boost/system//boost_system
  <library>/boost/iostreams//boost_iostreams
  <link>static 
  ;

install libCDef
  : CDef
  : <install-type>LIB
    <variant>release:<location>"~/infra_install/lib"
  : release
  ;

我需要指定 CDef 取决于 boost_date_time ,因此链接器应该这样订购它。

4

1 回答 1

0

基于http://www.boost.org/boost-build2/doc/html/bbv2/faq/liborder.html 这是由 Steven Watanabe 提供的。我试图通过使用<use>命令来帮助链接器。虽然这适用于 gcc,但对于 clang-linux 和 intel-linux 却没有。

然后 Kohei Takashi 启发了我的解决方法,就是修改clang-linux.jamintel-linux.jam

https://svn.boost.org/trac/boost/ticket/5820

不幸的是,这是在 boost.build 电子邮件组上的对话,但谢谢大家!

于 2013-05-08T19:15:54.270 回答