2

Netezza データベースに接続するように unixODBC をセットアップしようとしていますが、isql を使用して接続しようとすると、「Undefined symbol: 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 は問題ないようです。すべての依存関係が満たされました。

第 2 に、欠落していたファイルで確認できたのは、en_US ロケールの libc.mo ファイルだけだったので、en_GB ロケールへのシンボリック リンクを設定しました。残念ながら、探している他のすべてのライブラリが見つかったように見えても、同じエラーがスローされます。strace の出力に他に探すべきものはありますか?

更新 2:

私が現在見ている問題は、isql が ISO8859-1.so で gconv_end を探しているということですが、そのシンボルは存在しません。興味深いことに、シンボルは私の Ubuntu サーバー VM に存在せず、isql は正常に動作します。上記で指定した unixODBC の両方のバージョンには、同じ問題があります。

更新 3:

OK -d オプションと -r オプションを指定して ldd を再実行しました。はい、まだ問題があります。すべての SSL* 記号が欠落しています。これは、間違ったファイルへのシンボリック リンクを作成したことを意味していると思います。SSL_connect が含まれている ssl ライブラリ ファイルを知っている人はいますか?

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 lib が、ドライバーが探しているものと一致しない可能性があります。ldd はドライバ lib に何を表示しますか?

于 2011-09-05T08:43:48.530 に答える