You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译x64程序链接Boost库报LINK1112:X86与x64机器类型冲突问题

问题根因

你遇到的LINK1112错误本质是链接的Boost库实际为32位架构,和你的64位目标程序冲突。库名里的x64只是Boost构建工具b2根据你传入的address-model=64参数生成的命名标识,不代表库的实际编译架构,常见导致该问题的原因如下:

  • 构建Boost时使用的是32位VS工具链命令行:如果启动的是「x86 Native Tools Command Prompt for VS 2013」而非64位版本的工具链命令行,b2会默认继承当前环境的编译器架构,即便加了address-model=64参数,也会生成32位的库,仅在命名时加上x64后缀。
  • 构建参数不完整:你使用的Boost 1.77搭配vc120(VS2013)时,仅指定address-model=64无法自动切换工具链架构,需要额外补充architecture=x86参数(x64属于x86架构族,该参数搭配address-model=64才会明确生成x64架构库)。
  • 旧构建缓存残留:之前构建过32位版本的Boost,未清理缓存直接增量构建,会复用之前生成的32位目标文件,导致最终生成的lib中混有x86架构内容。
  • 项目链接路径错误:项目的附加库目录指向了其他位置的32位Boost库,而非你自己构建的64位产物。
解决方案
  1. 验证Boost库实际架构:打开「x64 Native Tools Command Prompt for VS 2013」,执行命令 dumpbin /headers libboost-serialization-vc120-mt-s-x64_1_77.lib,查看输出中「FILE HEADER VALUES」部分的架构标识:如果显示14C machine (x86)则证明该库实际为32位架构,和文件名标识无关。
  2. 清理旧构建产物:删除Boost源码根目录下的bin.v2缓存文件夹,以及之前生成的所有lib、dll文件,避免增量构建复用旧文件。
  3. 重新构建64位Boost库:在「x64 Native Tools Command Prompt for VS 2013」中切换到Boost源码根目录,执行如下命令:
b2 address-model=64 architecture=x86 threading=multi runtime-link=static --with-serialization stage

上述参数和你需要的libboost-serialization-vc120-mt-s-x64_1_77.lib命名规则完全匹配,构建完成后会输出到源码根目录的stage/lib文件夹下。
4. 验证新库架构并重新编译项目:再次用dumpbin命令验证新生成的lib,确认显示8664 machine (x64)后,将项目链接器的附加库目录指向新的stage/lib路径,重新编译项目即可解决冲突。

内容的提问来源于stack exchange,提问作者user3353819

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:42:02