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
问题根源解释
- 你系统里的
gcc其实是Apple Clang的符号链接,但编译时错误调用了/usr/local目录下残留的旧GCC组件(cc1),这个组件依赖的旧版本libmpfr.4.dylib在Catalina升级后已经不存在或路径失效。 /usr/local中残留的未通过Homebrew管理的头文件、库文件,与Homebrew管理的依赖产生了冲突。- Homebrew未链接的kegs和PATH配置问题,导致系统无法找到正确的依赖库路径。
内容的提问来源于stack exchange,提问作者Nico Battelli
相关产品推荐
相关产品推荐

