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

Mac M1设备Homebrew安装g++编译报addend too big for relocation错误

错误根因

该报错是M1(aarch64)架构MacOS平台上旧版GCC的已知兼容问题:
你代码中定义了全局的vector<int> vec[1145140]数组,每个vector实例在arm64架构下占24字节,总大小刚好是报错信息中出现的27483360字节。GCC 11.x版本对Darwin arm64平台的重定位逻辑存在缺陷,默认使用的小代码模型无法处理超出阈值的全局静态存储偏移,因此编译时生成的汇编指令无法完成合法重定位,触发报错。而clang针对苹果平台做了专门适配,因此可以正常编译。


解决方案

  • 方案1:升级GCC版本
    该BUG在GCC 12及之后的版本已经修复,你可以通过Homebrew执行brew upgrade gcc升级到最新稳定版GCC,之后使用对应版本的g++(如g++-13)编译即可正常通过。
  • 方案2:添加编译参数指定大内存模型
    如果你不想升级GCC版本,可以在编译时添加-mcmodel=large参数,让GCC使用支持更大偏移的大内存模型生成代码,编译命令改为:
    /opt/homebrew/bin/g++-11 -mcmodel=large a.cpp
    
  • 方案3:调整代码实现
    从代码实践角度不建议定义超大容量的全局静态数组,你可以将其改为动态分配的形式,例如:
    vector<vector<int>> vec(1145140);
    
    动态分配的内存在堆上存储,不会触发全局静态区的重定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:09:02