У меня есть 32-разрядная БД Oracle (версия 9i - 9.2.0.7.0), 64-разрядный Mac, и я пытаюсь подключиться к нему, используя go-oci8 с Go Lang (версия go1.11.1 Darwin / amd64).
Я использовал SQL-Developer 4.0.2 , чтобы успешно подключиться к БД, а затем включил соединение InstantClient через нее, используя это руководство. Так что у меня все работает со стороны клиента Oracle.
Я использую InstantClient версии 11.2.0.4.0 (32-разрядная версия) для MacOS (базовая версия и SDK), я использовал в основном это руководство почти успешно. После всего, я получаю ошибку:
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, у меня не возникнет проблем, но я получаю ошибку «driver: bad connection», которая связана с тем, что 64-битная версия не работает для подключения по какой-либо причине.
Понятия не имею, что делать, чтобы решить эту проблему - могу ли я каким-то образом форсировать сборку 32-битных файлов при использовании go get -u -v github.com/mattn/go-oci8
? Или как-то заставить 64-битную версию InstantClient подключиться к старой 32-битной БД Oracle?
Буду очень признателен за любую помощь в том, как это запустить.
Редактировать: я пробовал 10.2 Oracle Client, но не могу подключить его к 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 и выше.