在alpine操作系统中编译golang的oracle客户端服务

oracle版本:11.2.0.4.0

下载oracle客户端

https://download.oracle.com/otn/linux/instantclient/11204/instantclient-basic-linux.x64-11.2.0.4.0.zip

https://download.oracle.com/otn/linux/instantclient/11204/instantclient-sdk-linux.x64-11.2.0.4.0.zip 将两个压缩包加压到/instantclient_11_2目录中

安装需要的依赖

apk add --no-cache libnsl libaio pkgconfig gcc musl-dev libc6-compat

使用go-coi8包进行连接oracle数据库

安装pkg-config

apk add pkgconfig

配置环境变量

ORACLE_HOME="/instantclient_11_2" \
    TNS_ADMIN="/instantclient_11_2/network/admin" \
    GOROOT="/usr/local/go" \
    PATH="$PATH:/usr/local/go/bin" \
    PKG_CONFIG_PATH="/"

依赖glibc,所以需要在alpine安装glic

Releases · sgerrand/alpine-pkg-glibc · GitHub

下载glibc 需要glibc-2.35-r0.apk  glibc-bin-2.35-r0.apk  glibc-dev-2.35-r0.apk

 PKG_CONFIG_PATH是pkg-config的配置文件路径,编写oci8.pc文件

prefix=/instantclient_11_2
libdir=${prefix}
includedir=${prefix}/sdk/include/

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

Name: oci8
Description: oci8 library
Libs: -L/usr/glibc-compat/lib -L${libdir} -lclntsh
Cflags: -I${includedir}
Version: 12.2

需要添加动态链接库的位置到ld配置文件

echo -e '/instantclient_11_2\n/usr/glibc-compat/lib\n/usr/lib\n/lib' > /etc/ld.so.conf && \
ldconfig

alpine的连接器/lib/ld-musl-x86_64.so.1 和glibc中的/usr/glibc-compat/lib/ld-linux-x86-64.so.2连接器不兼容无法直接使用glibc中的连接器

编译时需要使用glibc中的动态连接器构建项目

/usr/glibc-compat/lib/ld-linux-x86-64.so.2 /usr/local/go/bin/go build

执行也需要使用glibc中的链接器

/usr/glibc-compat/lib/ld-linux-x86-64.so.2 ./oracle-test user/name@host:port/sid

运行需要添加环境变量

 LD_LIBRARY_PATH /lib:/usr/lib:$ORACLE_HOME

 附上alpine客户端的dockerfile

FROM alpine:3.16.2

LABEL maintainer="f1474240856@163.com"

ADD instantclient-basic-linux.x64-11.2.0.4.0.zip glibc-2.35-r0.apk /
CMD ["/bin/sh"]
ENV LANG=C.UTF-8
ENV ORACLE_HOME /instantclient_11_2
ENV TNS_ADMIN $ORACLE_HOME/network/admin
ENV LD_LIBRARY_PATH /lib:/usr/lib:$ORACLE_HOME
RUN apk add --no-cache libaio libnsl unzip && unzip instantclient-basic-linux.x64-11.2.0.4.0.zip && apk del unzip && rm -f instantclient-basic-linux.x64-11.2.0.4.0.zip

有想过使用静态连接编译客户端,查到资料应该是不支持使用静态链接编译的

Issues Affecting Linux for Oracle Database 18c

不太会发长文请见谅,有什么需要指正的欢迎评论或者私信我

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值