尝试构建使用 oracle-instantclient 的项目时,出现错误:
/usr/bin/ld: cannot find -lclntsh
collect2: error: ld returned 1 exit status
make: *** [Makefile:10: build] Error 2
在instantclient-basic-linux.x64-[VERSION].zip包中- 缺少此文件/lib(或仅仅是密钥)lclntsh,但有这个:libclntsh.so。
这里提到了这个库:
/home/test/go/src/github.com/mattn/go-oci8/README.md:Libs: -L${libdir} -lclntsh
/home/test/go/src/github.com/mattn/go-oci8/oci8.pc:Libs: -L${libdir} -lclntsh
/home/test/go/src/github.com/mattn/go-oci8/.travis.yml: echo "Libs: -L$ORACLE_HOME/lib -Wl,-rpath,$ORACLE_HOME/lib -lclntsh";
我手动指定了这些文件中 oracle-instantclient 内容的路径 - 就我而言,它在这里:
/usr/lib/oracle/19.10/client64/lib/
所以 :
prefix=/usr
includedir=${prefix}/include/oracle/19.10/client64
libdir=${prefix}/lib/oracle/19.10/client64/lib
但没有任何帮助。
附言:
declare -x ORACLE_HOME="/usr/lib/oracle/19.10/client64"
declare -x LD_LIBRARY_PATH="/usr/lib/oracle/19.10/client64/lib/"
总的来说,在更详细地研究了这个问题之后,我 在项目深处 找到了oci8.pc文件: vendor/github.com/mattn/go-oci8/oci8.pc 在这个文件中,我将 Oracle 值更改为我自己的:原来是 12.1,现在是 19.10
我开始构建这个项目并且一切顺利。