树莓派PICO项目CMake编译因编码问题找不到.obj文件如何解决
问题根本原因
你日志里路径前的乱码∩╗┐是UTF-8 BOM(字节顺序标记)解析错误导致的,报错的AR10B2~1.EXE是ARM交叉编译链的归档工具arm-none-eabi-ar,该工具无法识别带BOM的文件路径,才会提示文件不存在,实际上你可以到CMakeFiles/Generated.dir目录下验证,Generated.c.obj是已经正常生成了的。
这个问题属于CMake 3.21.x版本在Windows环境下生成NMake Makefile时的已知编码兼容缺陷。
解决步骤
- 先完全删除build目录下的所有缓存文件,避免旧的错误构建配置残留
- 把项目下的
Generated.c源文件编码改为不带BOM的UTF-8:用系统记事本打开文件,点击「另存为」,底部编码下拉选择「UTF-8」(不要选带BOM/签名的UTF-8)后覆盖保存即可 - 重新执行CMake配置命令时,添加参数强制指定编码规则:
cmake .. -G "NMake Makefiles" -DCMAKE_C_FLAGS="--utf-8" -DCMAKE_CXX_FLAGS="--utf-8" - 如果上述操作后仍然报错,直接升级CMake到3.24及以上版本,该版本后官方已经修复了Windows平台下NMake生成文件的BOM兼容问题
- 备选方案:避开NMake生成器,直接使用Visual Studio 2019生成器,操作更稳定:
配置完成后直接打开生成的sln工程文件编译即可,注意编译目标选择ARM架构,不要选择x86/x64。cmake .. -G "Visual Studio 16 2019" -A ARM
内容的提问来源于stack exchange,提问作者Joe Jackson
相关产品推荐
相关产品推荐

