M1版macOS下VSCode开发Actix-Web报proc macro架构不兼容错误
- 基于Rust语言、Actix-Web框架按照官方入门文档搭建Web服务,服务可正常在8080端口运行,但VSCode编辑器中持续显示错误提示
- 错误截图:

- 鼠标悬停IDE错误标识时,弹出的完整报错信息如下:
proc macro
mainnot expanded: Cannot create expander for /Users/name/Documents/projects/project-rust/target/debug/deps/libactix_web_codegen-b262af45f63000f3.dylib: Io(Custom { kind: InvalidData, error: DlOpen { desc: "dlopen(/Users/name/Documents/projects/project-rust/target/debug/deps/libactix_web_codegen-b262af45f63000f3.dylib, 0x000A): tried: '/Users/name/Documents/projects/project-rust/target/debug/deps/libactix_web_codegen-b262af45f63000f3.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libactix_web_codegen-b262af45f63000f3.dylib' (no such file), '/usr/lib/libactix_web_codegen-b262af45f63000f3.dylib' (no such file)" } })
- 设备运行环境:macOS Monterey 12.1,搭载M1系列芯片
报错核心是架构不匹配:本地终端使用的Rust工具链是arm64原生版本,编译出的Actix-Web过程宏动态库为arm64架构,服务可以正常编译运行;但VSCode内的rust-analyzer插件运行在x86_64架构下(一般是VSCode被设置为通过Rosetta转译启动,或者安装了x86版本的rust-analyzer),无法加载arm64架构的宏文件,最终触发宏展开失败的IDE错误。
- 完全退出VSCode,清除程序后台进程
- 打开访达进入应用程序目录,找到Visual Studio Code图标,右键选择「显示简介」,取消勾选「使用Rosetta打开」选项后关闭简介窗口
- 重新打开VSCode,进入扩展面板,找到已安装的rust-analyzer扩展,执行卸载操作,完成后重启VSCode,重新安装最新版rust-analyzer
- 回到项目根目录,在终端执行命令清理历史编译缓存:
cargo clean
- 再次用VSCode打开项目,等待rust-analyzer完成依赖索引、元数据加载后,错误提示会自动消失。
如果上述操作完成后问题仍存在,终端执行rustup show,检查输出的host字段值:
- 若值为
x86_64-apple-darwin,说明本地Rust工具链是x86转译版本,卸载后重装arm64原生版本的rustup即可 - 若值为
aarch64-apple-darwin,重启rust-analyzer服务即可:VSCode内按Cmd+Shift+P,搜索rust-analyzer: Restart server执行。
内容的提问来源于stack exchange,提问作者Roman Mahotskyi

