macOS symbol(s) not found for architecture arm64错误原因总结

发布于:2025-03-04 ⋅ 阅读:(29) ⋅ 点赞:(0)

背景

环境:

  • macOS 14
  • MacBook Pro M3

ld: symbol(s) not found for architecture arm64 错误原因总结

编译错误1

在macOS上进行C++开发,有时会遇到以下报错:

Undefined symbols for architecture arm64:
  "CameraRawWidget::eventFilter(QObject*, QEvent*)", referenced from:
      vtable for CameraRawWidget in mocs_compilation.cpp.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

这个错误信息,让人很茫然,很容易被ld: symbol(s) not found for architecture arm64误导,而且很多编译错误也会出现这行话。实际上的真实原因,可能跟ARM架构毫无关系。

故总结一下可能的原因:

原因一

函数未定义。即,如果没有实现函数的定义,也会报这个错误。

原因二

使用的库未链接。当使用某个库时,代码里调用了,但CMake里没进行链接,引用这个库,也会报这个错误

原因三

CMake 缓存未刷新,导致没索引到这个文件,从而找不到定义。刷新一下CMake即可。

编译错误2

Undefined symbols for architecture arm64:
  "_main", referenced from:
      <initial-undefines>
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

这里有个关键点_main,排查CMakeLists.txt,发现使用add_executable()创建可执行文件项目,但没有main.cpp,所以问题很清晰了。解决方案也很简单,创建main.cpp, 或者改为add_library(),即可编译成功

总结

目前已记录的已知原因如上,后续遇到继续更新。


网站公告

今日签到

点亮在社区的每一天
去签到