首页 >后端开发 >Golang >如何在 Linux 上将 Go CGO 可执行文件与 Oracle 库静态链接?

如何在 Linux 上将 Go CGO 可执行文件与 Oracle 库静态链接?

Patricia Arquette
Patricia Arquette原创
2024-11-25 10:50:11288浏览

How to Statically Link a Go CGO Executable with Oracle Libraries on Linux?

在 Linux 上链接 Go CGO 可执行文件与 Oracle 库的静态执行

问题陈述:

构建基本 Go使用静态编译时,与 Oracle 数据库的片段接口失败命令:

CGO_ENABLED=1 go build -work -x -ldflags "-v -linkmode external -extldflags -static"  ${MAIN_SRC}

编译错误表示找不到Oracle库-lclntsh。尽管尝试设置环境变量并安装 Oracle 数据库包中的附加文件,静态编译仍然失败。

解决方案:

  1. 生成静态库:

    Oracle 通常不附带静态库libclntst.a。要生成它,请运行以下命令:

    $ORACLE_HOME/bin/genclntst
  2. 链接应用程序:

    将您的应用程序与生成的静态库链接:

    CGO_ENABLED=1 go build -work -x -ldflags "-v -linkmode external -extldflags -static -L/usr/lib/oracle/12.1/client64/lib -lclntsh -lclntst"  ${MAIN_SRC}
  3. 处理缺失符号(可选):

    如果仍然缺少符号,请使用 nm 工具来识别它们。然后,根据需要添加其他静态库来解决依赖关系。

附加说明:

  • 使用 Oracle 中的链接器实用程序可能是有助于分析依赖关系。
  • 根据 Oracle 版本和编译器,可能需要链接其他ICC 运行时静态库。
  • 静态链接需要手动解析所有依赖项,这可能很复杂。

以上是如何在 Linux 上将 Go CGO 可执行文件与 Oracle 库静态链接?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn