Проблема с драйверами ODBC для unixodbc и netezza (неопределенный символ: SSL_connect) - PullRequest
2 голосов
/ 02 сентября 2011

Я пытаюсь настроить unixODBC для подключения к базе данных Netezza, однако я получаю «Неопределенный символ: SSL_connect», когда пытаюсь подключиться с помощью isql.

В настоящее время используется: CentOS 5.5, unixODBC 2.3.0 (та же проблема с 2.2.11).

Я сделал следующее:

  • Настроил LD_LIBRARY_PATH, ODBCINI и NZ_INI_FILE_PATH в соответствии с файлом README.txt, поставляемым с драйверами ODBC.
  • Предполагается, что все библиотеки загружаются с помощью команды ldd и настройки символических ссылок для libssl и libcrypto.
  • Обновлен файл /etc/ld.so.conf, чтобы обеспечить загрузку пути драйверов netezza.
  • Используется nm для подтверждения того, что символ SSL_connect находится в драйвере.

Запуск dltest для файла с этим символом сообщает об ошибке «файл не найден», что обычно происходит при попытке запустить isql -v, однако я изменил переменную среды LD_DEBUG, чтобы получить дополнительную информацию об отладке, что привело к мне SSL_connect.

(К вашему сведению, export LD_DEBUG=files isql sospos - это то, что я использовал.)

Есть мысли? Это сводит меня с ума, поскольку кажется, что все есть, но это все еще не работает. Хуже всего то, что я установил то же самое на Ubuntu 10.10 месяцев назад, и это работало без проблем.

UPDATE:

Во-первых, ldd в файле libnzodbc.so выглядит хорошо. Все зависимости были удовлетворены.

Во-вторых, единственное, что я мог видеть в пропавшем файле, это файл libc.mo для локали en_US, поэтому я установил символическую ссылку на en_GB. К сожалению, он по-прежнему выдает ту же ошибку, хотя, похоже, он нашел все остальные библиотеки, которые ищет. Есть ли что-то еще в выводе strace, который я должен искать?

ОБНОВЛЕНИЕ 2:

Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что isql ищет gconv_end в ISO8859-1.so, однако этот символ не существует. Интересно, что этот символ не существует на моей виртуальной машине на сервере Ubuntu, и isql работает нормально. Обе версии unixODBC, указанные выше, имеют одинаковую проблему.

ОБНОВЛЕНИЕ 3:

O.K. Перезапустите ldd с опциями -d и -r, и да, проблемы все еще есть. Каждый символ SSL * отсутствует. Я предполагаю, что это означает, что я создал символическую ссылку на неправильный файл. Кто-нибудь знает, какой файл библиотеки ssl содержит SSL_connect?

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

ОК Разобрался.Оказывается, созданная мной символическая ссылка указывала на неверный файл библиотеки.Первоначально я сделал это:

(/usr/lib/) ln -s libssl3.so libssl.so.4

Я должен был сделать это:

(/usr/lib) ln -s ../../lib/libssl.so.0.9.8e libssl.so.4
0 голосов
/ 07 августа 2013

Если кто-то все еще рассматривает подобную проблему, есть пакет django-netezza, который хорошо работает: https://github.com/msabramo/django-netezza

0 голосов
/ 05 сентября 2011

Ну, SSL_connect из библиотеки OpenSSL.Может быть, вы могли бы попробовать использовать strace на isql и опубликовать части, где он не может (я подозреваю) загрузить libssl.Возможно, ваша существующая библиотека ssl не соответствует тому, что ищет драйвер.Что показывает ldd в драйвере lib?

...