Linux环境下配置golang的oracle编译环境

本文最后更新于:2021年9月29日 下午

说明

本文主要描述在Linux环境下使用golanggo build时涉及到oracle环境时打包报错的问题。使用的golang的数据库驱动为go-oci8

首先如果涉及到Golang程序要在linux环境下正常运行,需要安装Oracle动态环境运行时。安装教程可以参考我的另外一篇文档教你如何在Centos7中配置Oracle运行时环境。但是如果涉及到编译,则需要多配置一些内容,至于为啥要这么配置。你问我,我也不知道。:smile:

我将按照傻瓜式操作,按照步骤一步一步教大家如果配置好一个能够被golang正常支持的oracle编译环境。

开发模式配置

通过pkg-config工具确认你已安装了oci8 c-lib

pkg-config这一工具是用来检索系统中安装库文件的信息。其主要功能如下:

  • 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  • 获得编译预处理参数,如宏定义,头文件的位置。
  • 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
  • 自动加入所依赖的其它库的设置。

–exists,可以用来测试模块的可用性。

判断是否已经安装了oci8。如果输出为”no”,代表没有安装。

1
pkg-config --exists oci8 || echo no

1.1 安装oci8

OCI是指ORACLE调用接口(Oracle Call Interface),它提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。

OCI是集成在 Oracle Database Instant Client 的Basic 版本中的。下载地址如下:
http://www.oracle.com/technetwork/database/features/instant-client/index.html

下载所需的俩个包,运行时包和sdk包

安装步骤

步骤1 解压缩instantclient-basic-linux.x64-11.2.0.4.0 到 /usr/local/oracle 目录下,得到的路径为 /usr/local/oracle/instantclient_11_2/
步骤2 解压缩instantclient-sdk-linux.x64-11.2.0.4.0,会得到一个和步骤1中相同名称的目录,该目录下有一个名称为 sdk 的子目录,将其移动到 步/usr/local/oracle/instantclient_11_2/ 目录下,最终的目录结构如下:

image-20210928155320742

步骤三 建立外链

1
cd /usr/local/oracle/instantclient_11_2/
1
ln -s libclntsh.so.11.1 libclntsh.so

1.2 修改oci8.pc文件

新建文件夹,用于存放oci8.pc文件

1
mkdir -p /usr/lib/pkgconfig/
1
2
cd /usr/lib/pkgconfig/
vim oci8.pc

写入文件内容如下,如果下载的版本与文章不一致,修改文件中路径和内容即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Package Information for pkg-config
prefix=/usr/local/oracle/instantclient_11_2
exec_prefix=/usr/local/oracle/instantclient_11_2
libdir=${exec_prefix}
includedir=${prefix}/sdk/include/

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: OCI
Description: Oracle database engine
Version: 11.2
Libs: -L${libdir} -lclntsh
Libs.private:
Cflags: -I${includedir}

设置全局参数: PKG_CONFIG_PATH

/etc/profile 文件中增加下面一条:

1
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/

使配置生效

1
source /etc/profile

配置方式参考文档 How build github.com/mattn/go-oci8 (Go oracle driver)

链接

oci8.pc 示例

linux下使用go-oci8

https://github.com/Centny/Centny/blob/master/Articles/How%20build%20github.com%3amattn%3ago-oci8.md


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!