# 下载 ORACLE INSTANCCLIENT 和对应的 SDK
下载地址: https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
下载之后先解压 basic 压缩包,然后将 sdk 解压到 basic 目录下,添加 C:\instantclient_11_2
到系统 PATH 变量
注意:不要将解压缩的文件放到有空格的目录中,例如 C:\Program Files\instantclient_11_2
否则后续会找不到 oci.h
# 下载安装 MINGW64
解决 WIN 中没有 GCC 的问题,如果不安装后期会出现问题:(exec: “gcc”: executable file not found in % PATH%),因为之前下载的 ORACLE INSTANCCLIENT 是 64 位的所以我们也需要下载 MINGW64 才能编译 (如果版本不对应会出现编译错误)。安装完成后添加 C:\mingw64\bin
到 PATH 环境变量。
# 获取 GO-OCI8 驱动
执行命令: go get github.com/wendal/go-oci8
会报一个错误: pkg-config: exec: "pkg-config": executable file not found in %PATH%
先忽略,后面解决
# 修改 OCI8.PC
进入 GOPATH 目录 %GoPath%\src\github.com\wendal\go-oci8\windows
,找到 OCI8.PC 文件,修改 prefix
和 exec_prefix
然后
-
复制此目录下 pkg-config.exe 到 mingw64 下的 bin 目录
-
复制此目录下 oci8.pc 到 mingw64 下的 lib/pkg-config 目录(pkg-config 目录需要自己建), 添加
PKG_CONFIG_PATH
环境变量,值为 oci8.pc 所在位置C:\mingw64\lib\pkg-config
# 继续安装 go-oci8
再次执行 go get github.com/wendal/go-oci8
出现如下错误
github.com/wendal/go-oci8
In file included from C:/instantclient_11_2/sdk/include/oci.h:541,
from D:\study\go\src\github.com\wendal\go-oci8\oci8.go:4:
C:/instantclient_11_2/sdk/include/oratypes.h:236:25: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘ubig_ora’
typedef unsigned _int64 ubig_ora;
找到 C:/instantclient_11_2/sdk/include/oratypes.h
文件中添加 #define _int64 __int64
或者
直接按照如下方式修改:
1 | typedef unsigned __int64 ubig_ora; |
继续执行 go get github.com/wendal/go-oci8
出现错误
github.com/wendal/go-oci8
D:\study\go\src\github.com\wendal\go-oci8\oci8.go:124:3: cannot use _cgo2 (type **_Ctype_struct_OCIServer) as type **_Ctype_struct_OCISvcCtx in argument to _Cfunc_OCILogon
打开 GOPATH 目录下 %GoPath%\src\github.com\wendal\go-oci8
,oci8.go 文件修改四处 OCIServer
为 OCISvcCtx
然后再执行 go get github.com/wendal/go-oci8
成功。
# Test Oracle Connect
1 | package main |