M1芯片Sequoia系统下Homebrew安装的GCC无法编译代码求助
问题:Homebrew安装的GCC无法在macOS Sequoia上编译代码
环境信息
- 芯片架构:
% uname -m arm64 - 系统版本:
% sw_vers ProductName: macOS ProductVersion: 15.3.1 BuildVersion: 24D70 - Command Line Tools版本:
% pkgutil --pkg-info=com.apple.pkg.CLTools_Executables package-id: com.apple.pkg.CLTools_Executables version: 16.2.0.0.1.1733547573 volume: / location: / install-time: 1739567437 - Apple clang(系统自带g++)版本:
% /usr/bin/g++ --version Apple clang version 16.0.0 (clang-1600.0.26.6) Target: arm64-apple-darwin24.3.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin - Homebrew安装的GCC版本:
% /opt/homebrew/bin/g++-14 --version g++-14 (Homebrew GCC 14.2.0_1) 14.2.0 Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
问题现象
编译以下简单C++程序:
#include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; return 0; }
使用Homebrew的g++-14编译时触发错误:
% /opt/homebrew/bin/g++-14 ~/Downloads/try.cpp ld: unsupported tapi file type '!tapi-tbd' in YAML file '/Library/Developer/CommandLineTools/SDKs/MacOSX15.sdk/usr/lib/libSystem.tbd' for architecture arm64 collect2: error: ld returned 1 exit status
但系统自带的/usr/bin/g++(Apple clang)可正常编译并运行程序。
解决方法
1. 指定使用Apple的链接器
编译时添加-fuse-ld=/usr/bin/ld参数,强制GCC使用系统自带的ld(支持新版tapi-tbd格式):
/opt/homebrew/bin/g++-14 -fuse-ld=/usr/bin/ld ~/Downloads/try.cpp
执行后可正常生成可执行文件,运行./a.out即可输出结果。
2. 重新安装/升级Homebrew GCC
更新Homebrew仓库后重装GCC,确保版本适配当前系统SDK:
brew update brew reinstall gcc
3. 设置正确的SDK路径
通过环境变量指定系统SDK路径,让GCC调用对应版本的库文件:
export SDKROOT=$(xcrun --show-sdk-path) /opt/homebrew/bin/g++-14 ~/Downloads/try.cpp
内容的提问来源于stack exchange,提问作者Heifetz_Fan
相关产品推荐
相关产品推荐

