我在SO和其他一些地方已经发现了这个问题,它总是与在x64版本上链接32位库有关,反之亦然,例如:Boost linker error: Unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)"
1>base_pcount.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>base_pcount.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
但我99%确定我正在链接并构建x64。
我使用以下命令构建了系统库(来自VS 2013 x64开发人员控制台):
bootstrap.bat
。\ b2 --build-dir = C:\ boost_1_53_0 \ binaries toolset = msvc-12.0 link = static threading = multi variant = release -address-model = 64 architecture = x86 system
所以在这一点上,要么是boost实际上没有为x64构建,要么我的程序没有为x64构建。有什么想法可能会出错吗? 不幸的是,没有人为vs 2013提供预编译的二进制文件,所以我完全陷入困境。
编辑:我通过升级到1.57并使用新版本提供的预编译二进制文件“解决”了这个问题。看起来像boost 1.53从来没有打算与2013年比赛。
答案 0 :(得分:2)
有点晚了,但我之前没有看到你的问题。
您需要移除-
前面的address-model=64
- 它是一个属性,而不是一个选项。所以我认为你毕竟没有为64位构建,因为-address-model=64
被认为是一个(可能是无效的)选项。