网上很多资料,但总是一知半解,翻来复去整了半天才成功,特记录下。
总体来说Oracle和sqlite3的驱动一样,都需要gcc环境的编译,只是sqlite3需要的包稍少,废话少说,直接开干:
1、安装cygwin或TMD-GCC(sqlite需要此编译包),确认已有pkgconf.exe,各个环境有些区别,也许叫pkg-config.exe
2、从oracle下载 客户端和sdk,解压到某目录,如d:\oracle,地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 。版本有 SDK 版本、Basic 版本。压缩包虽不同,但内含目录一致,解压到当前目录即可,拷贝到指定目录,示例:D:\oracle\instantclient。
3、获取oci8,或直接跳过此步,新建一个oci8.pc文件,内容如 4
4、修改 oci8.pc,参数参考 mattn-go-oci8的官网:https://github.com/mattn/go-oci8
//prefix=/devel/target/XXXXXXXXXXXXXXXXXXXXXXXXXX
//exec_prefix=${prefix} 将前两行干掉,并将libdir和includedir改成你解压的目录。
libdir=C:/app/instantclient_12_2/sdk/oci/lib/msvc
includedir=C:/app/instantclient_12_2/sdk/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: oci8
Description: oci8 library
Libs: -L${libdir} -loci
Cflags: -I${includedir}
Version: 12.2
注意:
错误1:
go get github.com/wendal/go-oci8
提示:
# github.com/wendal/go-oci8
D:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lclntsh
collect2.exe: error: ld returned 1 exit status
这是你的oci8.pc文件有错误,需要将 -lclntsh 改成 -loci
错误2:
Package oci8 was not found in the pkg-config search path.
Perhaps you should add the directory containing `oci8.pc'
to the PKG_CONFIG_PATH environment variable
Package 'oci8', required by 'virtual:world', not found
将 oci8.pc拷贝到你安装的gcc的pkgconfig下,如D:\cygwin64\lib\pkgconfig。再找不到请 先运行下
set PKG_CONFIG_PATH=D:\cygwin64\lib\pkgconfig
文章评论