首页 > 后端开发 > Golang > 正文

为什么我无法将我的 Go 应用程序与 Oracle 库静态链接,如何修复它?

Susan Sarandon
发布: 2024-11-26 19:53:15
原创
904 人浏览过

Why Can't I Statically Link My Go Application with Oracle Libraries, and How Can I Fix It?

在静态构建期间无法找到 Oracle 库

尝试在 Ubuntu 上使用 Oracle 库创建静态 Go 可执行文件时,遇到错误试图将它们联系起来。尽管动态构建成功,但静态编译器报告无法找到 Oracle 库,尽管所需的文件存在于正确的位置。

解决方案

  1. 使用 $ORACLE_HOME/bin/relink 工具生成 libclntst.a 库,因为 Oracle 客户端通常不附带此文件。此静态库包含静态链接所需的缺失符号。
  2. 使用 libclntst.a 库编译应用程序。验证不存在任何未解析的符号。
  3. 利用 nm 工具识别任何未解决的缺失符号的来源。
  4. 例如,在 Oracle 11gR2 的情况下,以下编译命令成功解决了所有依赖关系:
/usr/bin/c++ -Wall -ggdb3 -fPIC \
 CMakeFiles/opassgen.dir/opassgen.cpp.o \
 CMakeFiles/opassgen.dir/dbutils.cpp.o \
 CMakeFiles/opassgen.dir/common.cpp.o  \
 CMakeFiles/opassgen.dir/crypto.cpp.o  \
 n.o  -o opassgen                      \
 -rdynamic -static-libgcc -L. -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic \
 /home/oracle/ivan/openssl-1.0.1t/libcrypto.a  \
 /oracle/u01/db/11.2.0.4/lib/libclntst11.a     \
 /oracle/u01/db/11.2.0.4/lib/libippdcmerged.a  \
 /oracle/u01/db/11.2.0.4/lib/libippsmerged.a   \
 -Wl,--whole-archive libtrotl.a -Wl,--no-whole-archive \
 -lpthread -ldl
登录后复制

此命令包含用于解决依赖关系的附加静态库,包括libippdcmerged.a 和 libippsmerged.a.

总之,静态链接需要手动解析所有依赖项,这可能需要包含通常不包含在动态链接中的其他库。

以上是为什么我无法将我的 Go 应用程序与 Oracle 库静态链接,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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