如何在Windows x64平台编译同时兼容arm64与x64的单一DLL?
构建Windows多架构(x64/arm64)单一DLL的方法
可行性说明
Windows平台支持包含x64和arm64架构代码的FAT DLL(类似macOS的通用二进制),可在两种架构的Windows系统上运行,且完全能在x64 Windows机器上完成构建,无需arm64设备。
实现方案
1. 使用MSVC工具链(微软官方方案)
先分别编译两个架构的DLL,再用lib.exe工具合并:
# 编译x64版本DLL cl /LD /arch:x64 Library.c # 编译arm64版本DLL(需提前安装arm64目标的MSVC组件) cl /LD /arch:arm64 Library.c # 合并为多架构FAT DLL lib /OUT:Library.dll Library_x64.dll Library_arm64.dll
2. 使用gcc/g++(MinGW-w64交叉编译)
需要安装支持arm64交叉编译的MinGW-w64工具链,配合LLVM的llvm-lipo工具完成合并:
# 编译x64版本DLL x86_64-w64-mingw32-gcc -shared -o Library_x64.dll Library.c # 交叉编译arm64版本DLL aarch64-w64-mingw32-gcc -shared -o Library_arm64.dll Library.c # 合并为多架构DLL(需安装LLVM工具链获取llvm-lipo) llvm-lipo -create Library_x64.dll Library_arm64.dll -output Library.dll
关键说明
- gcc/g++本身没有内置的多架构二进制合并功能,需要依赖
llvm-lipo这类外部工具完成最终的合并步骤。 - 无论使用哪种工具链,核心逻辑都是先分别编译不同架构的独立DLL,再将它们打包到同一个文件中,系统加载时会自动匹配当前CPU架构执行对应的代码段。
内容的提问来源于stack exchange,提问作者Maxim
相关产品推荐
相关产品推荐

