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

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

Patricia Arquette
发布: 2024-11-25 10:50:11
原创
329 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板