2011-09-02 49 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