Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在boost.build.root中指定链接器依赖项_C++_Boost_Clang_Bjam_Boost Build - Fatal编程技术网

C++ 如何在boost.build.root中指定链接器依赖项

C++ 如何在boost.build.root中指定链接器依赖项,c++,boost,clang,bjam,boost-build,C++,Boost,Clang,Bjam,Boost Build,当我尝试使用b2 toolset=clang编译exec时,它使用如下链接命令: 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_

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

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
我相信我在
/boost/date\u time//boost\u date\u time
上指定
libCDef
的链接依赖性的方式可能不足以在链接过程中获得正确的顺序

CDef/Jamroot:

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
  ;
项目:使用要求~/infra\u安装;
lib-CDef
:[glob*.cpp]
: 
/boost/date\u time//boost\u date\u time
/boost/filesystem//boost\u文件系统
/boost/system//boost\u系统
/boost/iostreams//boost\u iostreams
静止的
;
安装libCDef
:CDef
:LIB
发布:“~/infra\u安装/lib”
:释放
;
我需要指定CDef取决于boost_date_time,因此链接器应该按此顺序进行订购。

基于 这是渡边捷文的贡献。 我试图通过使用
命令来帮助链接器。虽然这对gcc有效,但对clang linux和intel linux则不然

然后Kohei Takashi告诉我解决方案,那就是修改clang linux.jam英特尔linux.jam


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

请澄清您的问题:我假定您的第一个链接命令失败,如果是,链接错误是什么?哪个图书馆是罪魁祸首?你读过Boost.Build文档了吗?特别是
linkflags
部分。@rhalbersma我可以尝试将boost\u date\u time添加到此exe中的
linkflags
。但我真正想指定的是,无论哪个exe链接到
libCDef
,它也是我项目的一部分,都需要将
boost\u date\u time
添加到linker命令中。