macOS Sonoma 14.x下从源码编译Git遇ld链接错误求助
解决macOS下编译Git时ld提示“归档成员'/'不是mach-o文件”的链接错误
问题场景
在macOS Sonoma 14.1.2系统下,从Git官方仓库编译v2.43.0版本(commit 564d0252ca632e0264ed670534a51d18a689ef5d),为避免echo兼容问题指定bash为默认shell,执行make -j all时触发ld链接错误,提示:
归档成员'/'不是mach-o文件
涉及/Users/marslo/tools/git/xdiff/lib.a等多个库文件,编译失败。
编译执行步骤如下:
$ mkdir -p $HOME/tools/git $ git clone https://github.com/git/git.git $HOME/tools/git $ cd $HOME/tools/git # 查看版本 $ git show -s HEAD commit 564d0252ca632e0264ed670534a51d18a689ef5d (HEAD -> master, tag: v2.43.0, origin/master, origin/HEAD) ... # 编译 $ make configure $ ./configure --prefix=/usr/local --with-shell=/usr/local/bin/bash $ make -j all
系统已安装gcc、autoconf等依赖工具。
解决方案
1. 清理编译残留
彻底清除之前编译生成的所有文件,避免损坏的残留库影响后续编译:
make clean make distclean
2. 指定GNU ar工具编译
macOS自带的ar工具与Git编译依赖的GNU ar存在兼容性差异,可通过Homebrew安装GNU binutils,再在编译时指定AR变量路径:
# 安装GNU binutils(若未安装) brew install binutils # 重新生成配置并编译 make configure ./configure --prefix=/usr/local --with-shell=/usr/local/bin/bash AR=/usr/local/bin/g-ar make -j all
3. 禁用并行编译(可选)
若多线程编译导致文件生成异常,可去掉-j参数改用单线程编译:
make all
4. 验证结果
编译完成后执行安装并验证版本:
make install git --version
内容的提问来源于stack exchange,提问作者Marslo
相关产品推荐
相关产品推荐

