解决 CGO 可执行文件的静态 Oracle 库问题
问题概述:
编译时启用 CGO 和 Oracle 库的 Go 应用程序,静态链接期间出现错误。具体来说,GCC 链接器找不到所需的 Oracle 库 libclntsh。尽管在编译时指定了库路径,问题仍然存在。
解决方案:
按照以下步骤解决问题:
示例:
对于 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
记住,静态链接时需要手动解决依赖关系。在此示例中,libclntst11.a 依赖于 libippdcmerged.a 和 libippsmerged.a。
以上是如何解决 CGO 应用程序中 Oracle 库的静态链接错误?的详细内容。更多信息请关注PHP中文网其他相关文章!