Появляется ошибка /usr/bin/ld: cannot find -lclntsh
При попытке собрать проект, использующий 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 - отсутствует этот файл/либа (или просто ключ) 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/"
Ответы (1 шт):
Автор решения: миха капа
→ Ссылка
В общем, немного детальнее изучив вопрос, я нашёл файл oci8.pc в глубине проекта: vendor/github.com/mattn/go-oci8/oci8.pc В этом файле я поменял значения оракл на свои: было 12.1, а стало 19.10
prefix=/usr
includedir=${prefix}/include/oracle/19.10/client64
libdir=${prefix}/lib/oracle/19.10/client64/lib
Name: oci8
Description: Oracle Instant Client
Version: 19.10
Cflags: -I${includedir}
Libs: -L${libdir} -lclntsh
Запустил сборку проекта и всё получилось.
Done.
go build -o ./dist/oracle-plugin_linux_amd64 ./pkg