链接器错误:Boost.Chrono到Boost.Timer

jxr*_*mos 2 boost linker-errors

我试图用一个简单的例子来使用Boost.Timer进行一些秒表性能测量,我无法弄清楚为什么我无法将Boost.Timer成功链接到Boost.Chrono.我使用以下简单脚本从源代码构建了boost

.\b2 --clean
CALL bootstrap
.\b2 --build-type=complete address-model=64
Run Code Online (Sandbox Code Playgroud)

但仍然最终得到链接器错误.

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@$00$0DLJKMKAA@@boost@@@23@@23@XZ)
Run Code Online (Sandbox Code Playgroud)

是否有必要实际包含--with-chrono使用Timer类的标志?在Timer 文档中找不到任何相关内容虽然Thread 文档似乎提到了我从这个问题引出的更多内容,这些内容提示了一些链接修复的顺序.

这有点令人困惑,因为我看到组件已经构建并准备通过项目设置链接到Visual Studio中Linker->General->Additional Library Directories.我认为Boost的设计在处理这些特定库时并不明显.任何人都可以评论这个吗?是什么处理--with-chrono/ USES_CHRONO宏,它似乎不会阻止库的构建,所以有条件地编译一些代码,特别是time_point类?

我认为根据表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
Run Code Online (Sandbox Code Playgroud)

小智 6

这与另一个问题类似.答案是:

#include <boost/chrono.hpp>
Run Code Online (Sandbox Code Playgroud)