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

Posted

技术标签:

【中文标题】unixodbc 和 netezza ODBC 驱动程序问题(未定义符号:SSL_connect)【英文标题】:unixodbc and netezza ODBC driver issue (Undefined symbol: SSL_connect) 【发布时间】:2011-09-02 16:17:25 【问题描述】:

我正在尝试设置 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 服务器 VM 上不存在该符号,而 isql 工作正常。我上面指定的两个版本的 unixODBC 都有相同的问题。

更新 3:

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

【问题讨论】:

【参考方案1】:

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

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

我应该这样做:

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

【讨论】:

【参考方案2】:

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

【讨论】:

谢谢。我完全忘记了strace。奇怪的是,看起来该错误可能与 ssl 无关,至少直接与 ssl 无关。当我得到更多信息时,我会发布。【参考方案3】:

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

【讨论】:

以上是关于unixodbc 和 netezza ODBC 驱动程序问题(未定义符号:SSL_connect)的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“加载翻译库时出错”Linux ODBC 连接问题?

使用ODBC创建DBLINK

使用ODBC创建DBLINK

odbc_connect(): SQL 错误: [unixODBC][Driver Manager]Data source name not found, and no default driver

CakePHP 和使用 Unixodbc 连接到 MS Access db

Netezza 是不是具有 ODBC DESCRIBE 函数?