使用Visual Studio+WSL2交叉编译ARM64时生成x64二进制文件的问题求助
Visual Studio+WSL2交叉编译ARM64时生成x64二进制文件的问题求助
各位大佬好,我最近在折腾VS2022配合WSL2编译ARM64的C++项目,遇到了一个特别诡异的问题,想请教下有没有人碰到过类似情况。
环境与背景
- 开发工具:之前试过VS2026,后来切回了VS2022
- 项目类型:纯MSBuild的
.vcxproj项目,不是CMake项目 - 已安装组件:Windows端装了最新的C++ ARM64/ARM64EC构建工具,WSL(Ubuntu)里也配齐了所有依赖库和基础工具
- 项目配置:vcxproj里只定义了ARM和ARM64两种平台配置,当前在VS配置管理器中选中的是ARM64(ReleaseLinux ARM64)
问题现象
明明所有配置都指定了ARM64,构建日志里也显示平台是ARM64,输出目录也是ARM64专属的,但最终生成的.so文件却是x86-64架构的!用WSL的file命令检查结果如下:
libNativeSerialPort.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=96996de8ea441261e335bc02b46910918d61eaa9, with debug_info, not stripped
这个文件拿到ARM64环境下完全无法加载,直接报错。
构建日志关键片段
我把构建输出调到了Diagnostic级别,能看到明确的Platform=ARM64日志,但编译命令里却没看到指定ARM64架构的参数:
构建启动日志
1>------ Rebuild All started: Project: NativeSerialPort, Configuration: ReleaseLinux ARM64 ------
平台配置确认日志
1> Task "Message" 1> Task Parameter:Importance=Low 1> Task Parameter:Text=Platform=ARM64 1> Platform=ARM64
实际执行的编译命令
g++ -c -x c++ /root/projects/NativeSerialPort/NativeSerialPort.cpp -g1 -o "/root/projects/NativeSerialPort/obj/ARM64/ReleaseLinux/NativeSerialPort.o" -Wall -Wswitch -W"no-deprecated-declarations" -W"empty-body" -Wconversion -W"return-type" -Wparentheses -W"no-format" -Wuninitialized -W"unreachable-code" -W"unused-function" -W"unused-value" -W"unused-variable" -O3 -fno-strict-aliasing -fomit-frame-pointer -D_DEFAULT_SOURCE -DNDEBUG -fpic -fthreadsafe-statics -fexceptions -frtti -std=c++11
我的疑问
VS里已经选了WSL2 GCC Toolset,但我是不是漏了什么地方需要指定ARM64的交叉编译工具链?比如有没有隐藏的配置项没设置?现在完全摸不着头脑,明明所有表面配置都指向ARM64,但最终就是生成x64的二进制文件,求各位大佬帮忙分析下可能的原因!




