【发布时间】:2019-04-09 01:39:01
【问题描述】:
我有一个 32 位 Oracle DB(版本 9i - 9.2.0.7.0),一个 64 位 Mac,我正在尝试使用 go-oci8 和 Go Lang(版本 go1.11.1 darwin/amd64)连接到它。
我使用 SQL-Developer 4.0.2 成功连接到数据库,然后使用 this 教程通过它启用 InstantClient 连接。所以我已经从 Oracle 客户端运行了一些东西。
我正在使用适用于 MacOS(基本版和 SDK)的 InstantClient 版本 11.2.0.4.0(32 位),我主要使用 this 教程几乎成功。毕竟,我得到的错误是:
github.com/mattn/go-oci8 ld: warning: ignoring file /Users/myusername/Downloads/instantclient_11_2/libclntsh.dylib, file was built for i386 which is not the architecture being linked (x86_64): /Users/myusername/Downloads/instantclient_11_2/libclntsh.dylib Undefined symbols for architecture x86_64:
然后是一大堆符号。基本上,Go oci8 库正在尝试使用 C(64 位)并尝试构建 64 位文件,然后 Go 将使用这些文件。如果我尝试使用 64 位版本的 InstantClient,我没有任何问题,但我收到“驱动程序:连接错误”错误,这是因为 64 位无法连接某些原因。
我不知道如何解决这个问题 - 我可以在使用 go get -u -v github.com/mattn/go-oci8 时以某种方式强制构建 32 位文件吗?或者以某种方式让 64 位 InstantClient 版本连接到旧的 32 位 Oracle DB?
任何有关如何运行此程序的帮助都将不胜感激。
编辑:我尝试了 10.2 Oracle 客户端,但我无法将它与 go-oci8 连接(我假设它不支持它)。我得到的错误是../github.com/mattn/go-oci8/oci8.go:113:25: could not determine kind of name for C.OCI_SYSASM
针对有同样问题的人的最终编辑(使用非常旧的 Oracle 数据库) - 您无法使用 Go 与现成的解决方案交互。列出的可与 Oracle 一起使用的库可在客户端版本 11.2 及更高版本上运行。
【问题讨论】: