我正在尝试设置 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?