Linker error: Boost.Chrono to Boost.Timer

Linker error: Boost.Chrono to Boost.Timer

我正在尝试获得一个使用 Boost.Timer 的简单示例,用于一些秒表性能测量,但我无法弄清楚为什么我无法在 [=29] 之间成功 link =] 变成 Boost.Chrono。我使用以下简单脚本从源代码构建了 boost

.\b2 --clean
CALL bootstrap
.\b2 --build-type=complete address-model=64

但最终还是出现 linker 错误。

70>libboost_timer-vc100-mt-1_49.lib(cpu_timer.obj) : error LNK2001: unresolved external symbol "public: static class boost::chrono::time_point<class boost::chrono::steady_clock,class boost::chrono::duration<__int64,class boost::ratio<1,1000000000> > > __cdecl boost::chrono::steady_clock::now(void)" (?now@steady_clock@chrono@boost@@SA?AV?$time_point@Vsteady_clock@chrono@boost@@V?$duration@_JV?$ratio@[=11=][=11=]DLJKMKAA@@boost@@@23@@23@XZ)

是否需要实际包含 --with-chrono 标志才能使用计时器 class?在 Timer documentation although the Thread documentation seems to mention more which I was lead to from this question 中找不到任何相关内容,这表明有关 linking 修复顺序的信息。

这有点令人困惑,因为我看到程序集已构建并准备好通过项目设置 Linker->General->Additional Library Directories link 进入 Visual Studio。我认为 Boost 的设计在处理这些特定库的方式上并不明显。有人可以对此发表评论吗? --with-chrono / USES_CHRONO 宏是怎么回事,它似乎并没有阻止构建库所以它是否有条件地编译出一些代码,特别是 time_point class ?

我会根据Table 30.1 来思考。在线程文档~可配置功能的默认值”中,USES_CHRONO 默认为是,所以我应该启用这些功能吗?

C:\...\boost_binaries\msvc10_x64>dir /b | findstr /i chrono
boost_chrono-vc100-mt-1_49.dll
boost_chrono-vc100-mt-1_49.lib
boost_chrono-vc100-mt-gd-1_49.dll
boost_chrono-vc100-mt-gd-1_49.lib
libboost_chrono-vc100-mt-1_49.lib
libboost_chrono-vc100-mt-gd-1_49.lib
libboost_chrono-vc100-mt-s-1_49.lib
libboost_chrono-vc100-mt-sgd-1_49.lib
libboost_chrono-vc100-s-1_49.lib
libboost_chrono-vc100-sgd-1_49.lib

C:\...\boost_binaries\msvc10_x64>dir /b | findstr /i timer
boost_timer-vc100-mt-1_49.dll
boost_timer-vc100-mt-1_49.lib
boost_timer-vc100-mt-gd-1_49.dll
boost_timer-vc100-mt-gd-1_49.lib
libboost_timer-vc100-mt-1_49.lib
libboost_timer-vc100-mt-gd-1_49.lib
libboost_timer-vc100-mt-s-1_49.lib
libboost_timer-vc100-mt-sgd-1_49.lib
libboost_timer-vc100-s-1_49.lib
libboost_timer-vc100-sgd-1_49.lib

C:\...\boost_binaries\msvc10_x64>dir /b | findstr /i _system
boost_system-vc100-mt-1_49.dll
boost_system-vc100-mt-1_49.lib
boost_system-vc100-mt-gd-1_49.dll
boost_system-vc100-mt-gd-1_49.lib
libboost_system-vc100-mt-1_49.lib
libboost_system-vc100-mt-gd-1_49.lib
libboost_system-vc100-mt-s-1_49.lib
libboost_system-vc100-mt-sgd-1_49.lib
libboost_system-vc100-s-1_49.lib
libboost_system-vc100-sgd-1_49.lib

看起来 link 命令确实解决了它,我在项目设置 Linker->General->Input->Additional Dependencies 中设置了它,这表明 Visual Studio 有一些关于如何追逐 linker 依赖项给定的目录与 boost 依赖项的创建方式或我在源代码中使用 boost 的方式存在某种冲突。

我们内部的习惯是指向其他目录并让 linker 弄清楚,但我想这对所有库来说都不够稳健。 linking 的有趣顺序,我想知道 Visual Studio.

中的默认行为是如何定义的

这类似于。答案是:

#include <boost/chrono.hpp>