2

我正在尝试设置 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是我使用的。)

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

更新:

首先,libnzodbc.so 文件上的 ldd 看起来不错。已满足所有依赖项。

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

更新 2:

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

更新 3:

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

4

3 回答 3

2

好的 想通了。原来我创建的符号链接指向了错误的库文件。最初我是这样做的:

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

我应该这样做:

(/usr/lib) ln -s ../../lib/libssl.so.0.9.8e libssl.so.4
于 2011-09-07T15:01:57.993 回答
0

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

于 2011-09-05T08:43:48.530 回答
-1

如果有人还在寻找类似的问题,有一个 django-netezza 包运行良好:https ://github.com/msabramo/django-netezza

于 2013-08-06T22:30:20.170 回答