在macOS上使用go_ibm_db时如何解决'sqlcli1.h'文件找不到的问题?
在macOS上使用go_ibm_db时如何解决'sqlcli1.h'文件找不到的问题?
嗨,我之前在macOS上用go_ibm_db的时候也踩过这个坑!这个错误说白了就是:go_ibm_db依赖IBM DB2的客户端开发库,而你的机器上要么没装这个库,要么Go编译器找不到它的头文件路径。下面是我亲测有效的解决方法,一步步来:
第一步:安装IBM DB2客户端开发包
这个头文件sqlcli1.h是DB2客户端的核心开发文件,你得先装上对应的客户端包。你可以从IBM官方获取适配macOS的版本,跟着安装向导走完就行,记得留意安装路径(后面要用到)。第二步:让编译器找到头文件和库
安装完之后,需要告诉Go的编译环境去哪里找这些文件,有两种方式:- 设置全局环境变量
先确认你的DB2客户端的include和lib目录位置,比如默认可能在/opt/ibm/db2下面,那你就执行这几条命令(可以加到~/.zshrc或者~/.bash_profile里,这样下次重启终端也生效):
要是你的安装路径不一样,把上面的路径换成你自己的就行。export CPATH=/opt/ibm/db2/include:$CPATH export LIBRARY_PATH=/opt/ibm/db2/lib:$LIBRARY_PATH export DYLD_LIBRARY_PATH=/opt/ibm/db2/lib:$DYLD_LIBRARY_PATH - 编译时临时指定参数
如果你不想改全局环境变量,也可以在编译Go程序的时候直接传CGO参数,比如:
把路径替换成你实际的DB2客户端安装目录下的对应文件夹。CGO_CFLAGS="-I/你的DB2路径/include" CGO_LDFLAGS="-L/你的DB2路径/lib" go build
- 设置全局环境变量
额外提醒(针对M系列芯片macOS)
如果你用的是Apple Silicon的Mac(比如M1/M2/M3),要注意你装的DB2客户端是不是支持arm64架构。如果是x86版本的,可能需要用Rosetta 2来运行终端,或者找适配arm64的DB2客户端包,不然可能还会碰到其他编译或者运行的问题。
备注:内容来源于stack exchange,提问作者Gilo
相关产品推荐
相关产品推荐

