在x64上与Boost 1.53和VS 2013的链接器错误

时间:2015-02-01 20:54:39

标签: c++ boost visual-studio-2013 64-bit

我在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。

  • 我正在使用x64 target
  • 构建我的程序
  • 我正在使用boost 1.53
  • 我正在使用Vs 2013
  • 我使用以下命令构建了系统库(来自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年比赛。

1 个答案:

答案 0 :(得分:2)

有点晚了,但我之前没有看到你的问题。

您需要移除-前面的address-model=64 - 它是一个属性,而不是一个选项。所以我认为你毕竟没有为64位构建,因为-address-model=64被认为是一个(可能是无效的)选项。