unixodbc和netezza ODBC驱动程序问题(未定义的符号:SSL_connect)

时间:2011-09-02 16:17:25

标签: unixodbc netezza

我正在尝试将unixODBC设置为连接到Netezza数据库,但是当我尝试使用isql进行连接时,我收到了“未定义的符号:SSL_connect”。

目前正在使用:CentOS 5.5,unixODBC 2.3.0(与2.2.11相同)。

我做了以下事情:

  • 根据ODBC驱动程序附带的README.txt配置LD_LIBRARY_PATH,ODBCINI和NZ_INI_FILE_PATH。
  • 通过使用ldd命令并为libssl和libcrypto设置符号链接,确保已加载所有库。
  • 更新了/etc/ld.so.conf文件以确保加载了netezza驱动程序路径。
  • 使用nm确认SSL_connect符号位于驱动程序中。

针对此符号的文件运行dltest报告“找不到文件”错误,这是我在尝试运行isql -v时通常会得到的,但是我更改了LD_DEBUG环境变量以获取其他调试信息,这导致了我来SSL_connect。

(仅供参考,export LD_DEBUG=files isql sospos是我使用过的。)

有什么想法?这让我疯狂,因为看起来一切都在那里,但它仍然无法正常工作。最糟糕的是,我在10.10个月前在Ubuntu上设置了同样的东西,它没有任何问题。

更新:

首先,libnzodbc.so文件中的ldd看起来不错。所有依赖都已得到满足。

其次,我在文件中看到的唯一缺少的是en_US语言环境的libc.mo文件,因此我设置了一个指向en_GB的符号链接。不幸的是,它仍然抛出相同的错误,即使它看起来它找到了它正在寻找的其他所有lib。在我应该寻找的strace输出中还有其他什么吗?

更新2:

我目前看到的一个问题是isql正在ISO8859-1.so中寻找gconv_end,但该符号不存在。有趣的是,我的Ubuntu服务器VM上不存在该符号,并且isql正常工作。上面指定的两个版本的unixODBC我都有同样的问题。

更新3:

O.K。使用-d和-r选项重新运行ldd,是的,仍有问题。缺少每个SSL *符号。我猜这意味着我创建了一个指向错误文件的符号链接。任何人都知道哪个ssl库文件包含SSL_connect?

3 个答案:

答案 0 :(得分:2)

O.K。弄清楚了。事实证明我创建的符号链接指向错误的库文件。最初我这样做了:

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

我应该这样做:

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

答案 1 :(得分:0)

嗯,SSL_connect来自OpenSSL库。也许你可以尝试在isql上使用strace并发布它失败的部分(我怀疑)加载一个libssl。可能是您现有的ssl lib与驱动程序正在查找的内容不匹配。 ldd在驱动程序库上显示什么?

答案 2 :(得分:-1)

如果有人仍在查看类似问题,那么django-netezza软件包运行良好:https://github.com/msabramo/django-netezza