M1 Mac编译llama.cpp失败,架构不匹配链接报错求助
M1 Mac编译llama.cpp架构不兼容问题解决
错误原因
报错核心是ggml-metal-embed.o文件为x86_64架构,而M1 Mac需要arm64架构,导致链接阶段找不到对应架构的_ggml_metallib_end、_ggml_metallib_start符号。单纯修改主目录Makefile的编译参数没用,因为这个文件的编译规则属于ggml子模块,未被同步修改。
解决步骤
1. 清理残留编译产物
先彻底清除之前生成的x86_64架构文件,避免干扰:
make clean cd ggml && make clean && cd ..
2. 指定arm64架构编译
推荐直接通过命令行传递架构参数,无需手动修改Makefile:
# 基础编译 make ARCH=arm64 # 启用Metal加速(M1 Mac推荐) make ARCH=arm64 METAL=1
如果偏好手动修改Makefile,需同时修改两处:
- 主目录Makefile:确保
ARCH=arm64,或在MK_CFLAGS、MK_CXXFLAGS中保留-arch arm64 - ggml/src/Makefile:找到编译
ggml-metal-embed.o的规则,添加-arch arm64参数:ggml-metal-embed.o: ggml-metal.metal @echo "Compiling metal kernel..." xcrun -sdk macosx metal -arch arm64 -c $< -o $@
3. 验证编译结果
编译完成后,检查生成的二进制架构是否正确:
lipo -info llama-baby-llama
正常输出应为:Non-fat file: llama-baby-llama is architecture: arm64
内容的提问来源于stack exchange,提问作者Krish Parikh
相关产品推荐
相关产品推荐

