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

使用Bazel与MSVC在x86架构编译DLL却生成x64文件的求助

在Bazel中使用MSVC编译x86架构C++ DLL的正确配置

你的核心问题在于Bazel的CPU架构参数配置错误,以及手动链接选项的冲突,以下是具体解决步骤:

1. 修正bazelrc中的CPU参数

你当前使用的x64_x86_windows是旧版交叉编译标识,Bazel目前推荐直接指定目标架构为x86_windows,同时主机架构(构建工具运行的架构)设为当前机器的实际架构(如果你的开发机是x64,就写x64_windows)。修改后的bazelrc配置如下:

build:relwithdebinfo --cxxopt=/std:c++14 
build:relwithdebinfo --copt=/DWIN32      
build:relwithdebinfo --copt=/D_WINDOWS  
build:relwithdebinfo --cpu=x86_windows
build:relwithdebinfo --host_cpu=x64_windows

配置正确后,Bazel会自动调用MSVC的x86版本编译工具链,而非强制用x64工具链编译x86代码。

2. 移除手动添加的链接选项

你在cc_binary中添加的/MACHINE:X86会被Bazel工具链的自动配置覆盖,甚至可能引发冲突,直接删除这一行即可。正确指定CPU参数后,工具链会自动传递对应的/MACHINE参数给链接器。

3. 确认MSVC x86工具组件已安装

打开Visual Studio Installer,确保在「Desktop development with C++」工作负载下勾选了MSVC vXXX - VS 20XX C++ x86/x64 build tools(包含x86目标的编译工具集),如果未安装,补充安装后再重新构建。

4. 清理缓存并重新构建

旧的x64构建缓存可能导致配置不生效,执行以下命令彻底清理后重新构建:

bazel clean --expunge
bazel build --config=relwithdebinfo //your/package:target_dll

替换//your/package:target_dll为你实际的DLL目标标签。

5. 验证结果

使用dumpbin检查最终生成的DLL:

dumpbin /headers path/to/your_generated.dll | findstr "machine"

正常情况下会输出14C machine (x86),表示这是标准的x86架构DLL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:22:40