提问人:user3353819 提问时间:9/24/2021 更新时间:9/24/2021 访问量:834
升压模块机器类型“X86”与目标机器类型“x64”冲突
Boost module machine type 'X86' conflicts with target machine type 'x64'
问:
我正在 Windows 上构建一个 64 位程序,需要链接到 Boost 库。
我正在成功使用其他 64 位库。
当我构建 boost 时,我使用命令明确指定我需要 64 位库
'.\b2 地址模型=64'
它构建了我需要的库:
“libboost-序列化-vc120-mt-s-x64_1_77.lib”
顾名思义,这应该是一个 64 位库。
但是,当我尝试编译我的程序时,出现链接错误:
描述: “错误LINK1112:模块计算机类型”X86“与目标计算机类型”x64“冲突
文件: “libboost-序列化-vc120-mt-s-x64_1_77.lib”
这是怎么回事 - 它是一个 64 位库,为什么说它与机器类型“x64”冲突,我该怎么办?
答:
好的,我“想出”了如何解决这个问题。
基本上,我以为正在发生的事情正在发生。尽管指定了 64 位版本,并且这些库的名称适合 64 位版本,但它们是使用 32 位工具链构建的。
对于碰巧看到这一点的 Boost 的任何人来说 - 这是一个非常糟糕的体验,应该修复
为了让它正确构建库,我必须运行隐藏在 MSVC 程序文件中的脚本,以在通常的提升过程之前将环境设置为 64 位。.bat
有各种各样的这些脚本用于不同的目的,详见此处,尽管令人愤怒的是,它没有指定在哪里可以找到它们。
在四处寻找它们之后,我找到了我需要的文件(由于复杂的原因,我使用的是旧版本的 MSVC,它只有 32 位风格,但可以交叉编译 64 位代码)。vcvarsx86_amd64.bat
对我来说,这是在
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 进行构建就非常人为、不透明,而且......破碎。几乎就像它旨在使它变得困难一样。你如何忍受它?
评论