Boost 模块机器类型 'X86' 与目标机器类型 'x64' 冲突

Boost module machine type 'X86' conflicts with target machine type 'x64'

我正在 Windows 上构建一个 64 位程序,需要 link 到 Boost 库。

我正在成功使用其他 64 位库。

当我构建 boost 时,我使用命令

明确指定我需要 64 位库

`.\b2 地址模型=64'

它构建了我需要的库:

`libboost-serialization-vc120-mt-s-x64_1_77.lib'

顾名思义,这应该是一个 64 位库。

然而,当我尝试编译我的程序时,出现 linking 错误:

说明: `错误 LINK1112:模块机器类型 'X86' 与目标机器类型 'x64'

冲突

文件: `libboost-serialization-vc120-mt-s-x64_1_77.lib'

这是怎么回事 - 它是一个 64 位库,为什么说它与机器类型冲突 'x64',我该怎么办?

好的,我“想出了”如何解决这个问题。

基本上,我认为正在发生的事情 正在 发生。尽管指定了 64 位构建并且那些库获得了适合 64 位构建的名称,但它们是使用 32 位工具链构建的。

对于碰巧看到这个的任何来自 Boost 的人 - 这是一个非常糟糕的体验,应该被修复

为了让它正确构建库,我必须 运行 一个隐藏在 MSVC 程序文件中的 .bat 脚本,以便在 之前 [=49] 将环境设置为 64 位=] 通常的升压程序。

有多种此类脚本用于不同的目的,详见 here,尽管令人恼火的是它没有指定在哪里可以找到它们。

在寻找它们之后,我找到了我需要的文件 vcvarsx86_amd64.bat(出于复杂的原因,我使用的是旧版本的 MSVC,它只有 32 位风格,但可以交叉编译 64 位代码)。

对我来说,这是在

中找到的

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat

注意:要使其中的任何一项工作,都必须在开发人员命令提示符内完成,对我而言,它位于

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts

一旦进入该命令提示符,就会通过键入

构建正确的库文件
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat
bootstrap vc12
b2 address-model=64

然后它按预期链接。

免责声明:不必要的意见 - 请随时将其编辑掉...

来自 *nix 环境,所有这些看起来 很糟糕 。 Boost 对 C++ 开发至关重要,但仅使用 MSVC 构建它是如此令人难以置信的做作、不透明,而且只是……被破坏了。几乎就像是设计让它变得困难。你怎么忍受它?