You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译C++代码遇arm64架构未定义符号错误,求助解决

解决链接错误:ld: symbol(s) not found for architecture arm64

针对你遇到的问题,结合文件结构和报错信息,从以下几个方向排查:

  • 确认编译命令包含所有源文件
    如果你只编译了main.cpp(比如用g++ main.cpp -o app),storage.cpp的代码根本没被编译和链接,链接器自然找不到Storage类的构造、析构符号。正确的编译命令需要包含所有源文件:

    g++ main.cpp storage.cpp -o app
    

    用Makefile的话,要把storage.cpp加入源文件列表。

  • 检查类声明与实现的签名完全一致
    即使你说构造函数已实现,也要核对storage.h里的声明和storage.cpp里的实现签名是否完全匹配:

    • 比如头文件声明Storage(std::string path);,实现却写成Storage::Storage() {...},参数不匹配会导致链接器认为这是两个不同的函数,依然找不到目标符号。
    • 关于析构函数:如果storage.h里声明了~Storage();,哪怕是空实现也必须在storage.cpp里补上Storage::~Storage() {};如果不需要自定义析构,直接在头文件里写成~Storage() = default;或者删掉析构声明。
  • 排查命名空间匹配问题
    如果storage.h里的Storage类属于某个命名空间(比如namespace storage { class Storage {...}; }),那storage.cpp里的构造、析构实现必须加上命名空间前缀:

    namespace storage {
        Storage::Storage(...) {...}
        Storage::~Storage() {...}
    }
    

    否则链接器会找不到对应命名空间下的符号。

  • 验证arm64架构编译设置
    确保编译时目标架构是arm64,比如在Mac环境下,需要加上-arch arm64参数:

    g++ -arch arm64 main.cpp storage.cpp -o app
    

    如果storage.cpp被编译成了其他架构(比如x86_64)的目标文件,链接时也会出现符号缺失的错误。

内容的提问来源于stack exchange,提问作者user7381027

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:40:23