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

MacOS Catalina升级后GCC编译程序出现内部编译器错误求助

解决MacOS Catalina下编译hello-world.c时的libmpfr.4.dylib缺失问题

结合你的环境信息和报错细节,这个问题是升级Catalina后,系统残留的旧编译依赖库与当前环境冲突导致的,下面是分步解决的方案:

步骤1:清理/usr/local中未通过Homebrew管理的冲突文件

这些残留的gmp、mpfr相关头文件、静态库和.la文件是旧版本GCC留下的,会干扰当前编译环境:

# 删除冲突头文件
sudo rm -rf /usr/local/include/gmp.h /usr/local/include/gmpxx.h /usr/local/include/mpf2mpfr.h /usr/local/include/mpfr.h

# 删除冲突.la文件
sudo rm -rf /usr/local/lib/libgfortran.la /usr/local/lib/libgmp.la /usr/local/lib/libgmpxx.la /usr/local/lib/libgomp.la /usr/local/lib/libitm.la /usr/local/lib/libmpc.la /usr/local/lib/libmpfr.la /usr/local/lib/libquadmath.la /usr/local/lib/libssp.la /usr/local/lib/libssp_nonshared.la /usr/local/lib/libstdc++.la /usr/local/lib/libstdc++fs.la /usr/local/lib/libsupc++.la /usr/local/lib/libubsan.la

# 删除冲突静态库
sudo rm -rf /usr/local/lib/libatomic.a /usr/local/lib/libgfortran.a /usr/local/lib/libgmp.a /usr/local/lib/libgmpxx.a /usr/local/lib/libgomp.a /usr/local/lib/libitm.a /usr/local/lib/libmpfr.a /usr/local/lib/libquadmath.a /usr/local/lib/libssp.a /usr/local/lib/libssp_nonshared.a /usr/local/lib/libstdc++.a /usr/local/lib/libstdc++fs.a /usr/local/lib/libsupc++.a

步骤2:链接Homebrew中未关联的kegs

这些未链接的包包含正确的依赖库,链接后能让系统找到正确的库路径:

brew link gtk+ glib-networking gmp libidn2 gedit libsoup ghostscript gtk+3 mpfr python gtksourceview4 gdk-pixbuf shared-mime-info atk glib gtk-mac-integration gspell libpeas gnutls gsettings-desktop-schemas iso-codes

如果遇到链接冲突,可以针对核心依赖(比如gmp、mpfr)强制链接:

brew link --force gmp mpfr

步骤3:修复PATH环境变量

把Homebrew的sbin目录加入PATH,确保系统优先使用Homebrew管理的工具:

  • 如果你用zsh:
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc
source ~/.zshrc
  • 如果你用bash:
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

步骤4:验证编译是否正常

先确认当前gcc是Apple Clang(系统默认的符号链接):

gcc --version

然后编译你的hello-world程序:

gcc -o hello_world hello_world.c
./hello_world

如果想使用GNU官方版的GCC,可以通过Homebrew安装:

brew install gcc

安装完成后,用带版本号的命令调用(比如gcc-13,具体版本看安装结果):

gcc-13 -o hello_world hello_world.c

问题根源解释

  1. 你系统里的gcc其实是Apple Clang的符号链接,但编译时错误调用了/usr/local目录下残留的旧GCC组件(cc1),这个组件依赖的旧版本libmpfr.4.dylib在Catalina升级后已经不存在或路径失效。
  2. /usr/local中残留的未通过Homebrew管理的头文件、库文件,与Homebrew管理的依赖产生了冲突。
  3. Homebrew未链接的kegs和PATH配置问题,导致系统无法找到正确的依赖库路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:14