如何在非编译目录中使用go-llama.cpp的C-Go绑定
解决go-llama.cpp绑定在外部目录编译时找不到common.h的问题
问题分析
在外部目录使用go-llama.cpp绑定时,编译报错找不到common.h,本质是Go的Cgo编译时无法正确定位go-llama.cpp的头文件和编译好的静态库路径。
解决方案
1. 配置Go模块的本地依赖替换
在你的project目录下的go.mod文件中添加以下替换指令,让Go指向本地的go-llama.cpp目录:
replace github.com/go-skynet/go-llama.cpp => ../go-llama.cpp
之后在Go代码中使用标准导入路径即可:
import "github.com/go-skynet/go-llama.cpp"
2. 运行/编译时正确设置环境变量
在project目录下执行命令时,需要将LIBRARY_PATH和C_INCLUDE_PATH指向go-llama.cpp的目录:
- 使用相对路径(确保当前在project目录):
LIBRARY_PATH=$(pwd)/../go-llama.cpp C_INCLUDE_PATH=$(pwd)/../go-llama.cpp go run main.go
- 更稳妥的绝对路径方式:
# 先获取go-llama.cpp的绝对路径 LLAMA_DIR=$(realpath ../go-llama.cpp) LIBRARY_PATH=$LLAMA_DIR C_INCLUDE_PATH=$LLAMA_DIR go run main.go
3. 可选:全局设置环境变量(当前shell会话有效)
如果不想每次运行都输入环境变量,可以先把路径导出到当前shell:
export LLAMA_DIR=$(realpath ../go-llama.cpp) export LIBRARY_PATH=$LLAMA_DIR export C_INCLUDE_PATH=$LLAMA_DIR # 之后直接运行即可 go run main.go
验证要点
- 确认
go-llama.cpp目录下已执行过make libbinding.a,且目录中存在common.h和libbinding.a文件 - 确保环境变量指向的路径是go-llama.cpp的根目录,而非子目录
内容的提问来源于stack exchange,提问作者Ozymandias
相关产品推荐
相关产品推荐

