【问题标题】:Boost.Build link against boost librariesBoost.Build 针对 boost 库的链接
【发布时间】:2012-09-30 13:36:42
【问题描述】:

我正在尝试链接来自 Jamfile 的 boost 库:

import os ;
path-constant BOOST_ROOT : [ os.environ BOOST_ROOT ] ;
use-project /boost : $(BOOST_ROOT) ;

exe hello :
            hello.cpp
            /boost//filesystem
            /boost//system
          :
            <link>static
          ;

虽然我可以从控制台输出看到库已编译,但链接器输出错误:

msvc.link bin\msvc-10.0\debug\link-static\hello.exe
LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc100-mt-gd-1_46.lib'

为什么会报错? 我是从 Jamfile 级别链接到库,那么为什么在应该链接的时候没有链接库呢?据我了解,如果整个构建过程由 Jamfiles 控制,则库应自动静态链接,并且不应添加特定于编译器的标志(因为它会使 Jamfiles 的可移植性降低)。请帮忙。

【问题讨论】:

  • 您可能在使用 boost 的自动链接功能时遇到了问题。您可以通过定义BOOST_ALL_NO_LIB 来禁用它(我想将&lt;define&gt;BOOST_ALL_NO_LIB 添加到目标hello 的要求就足够了)。
  • 哇。似乎工作!但是怎么做?如果我定义自己的库目标: lib foo : foo.cpp ;我链接它就像增强然后它起作用。那么为什么在通过 Jamfiles 链接时它不能与 boost 库一起使用?
  • 另外,请把这个作为答案,以便我可以将其标记为答案并关闭线程。谢谢。

标签: boost bjam boost-build


【解决方案1】:

您可能在使用 boost 的自动链接功能时遇到了问题。您可以通过定义BOOST_ALL_NO_LIB 来禁用它(我想将&lt;define&gt;BOOST_ALL_NO_LIB 添加到目标hello 的要求就足够了)。

【讨论】:

  • 但是您知道为什么它可以与标记为目标“lib foo : foo.cpp ;”的自定义库一起使用吗?并且不适用于 boost ?
  • @MarcAndreson 这个问题是特定于 boost 库的。头文件中有一些特殊的代码可以检测您的编译器选项并尝试使用该信息来自动猜测哪个库必须与您的程序链接,显然忽略了您“手动”添加的任何库。这个过程有时(经常?(我不使用 Visual Studio))失败,使得链接比没有这个更难。 SO中有几个问题如this one有同样的问题。
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2010-11-27
相关资源
最近更新 更多