2011-09-02 47 views
2

我试图设置unixODBC连接到Netezza数据库,但是当我尝试使用isql进行连接时,出现“Undefined symbol:SSL_connect”。unixodbc和netezza ODBC驱动程序问题(未定义符号: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是我用过的东西。)

有什么想法?这让我疯狂,因为它看起来一切都在,但它仍然不起作用。最糟糕的部分是,我在Ubuntu 10.10月前设置了相同的东西,它没有任何问题。

UPDATE:

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

其次,我在文件中只能看到缺少的是en_US语言环境的libc.mo文件,所以我建立了一个符号链接到en_GB。不幸的是,它仍然抛出相同的错误,即使它看起来像找到了它所需要的所有其他库。在我应该寻找的strace输出中是否还有其他内容?

更新2:

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

UPDATE 3:

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

回答

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 
0

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

+0

谢谢。我完全忘了strace。奇怪的是,它看起来像错误可能不是,至少直接,ssl相关。当我获得更多信息时,我会发布信息。 – blockcipher