1

全て:

Solaris 10 環境で unixODBC をテストしており、libodbc と MyODBC ドライバーが libltdl.so と動的にリンクされているかどうかを確認しています。

    ldd /usr/lib/libodbc.so.2
    libltdl.so.7 =>  /usr/local/lib/libltdl.so.7
    libiconv.so.2 =>         /usr/local/lib/libiconv.so.2
    libthread.so.1 =>        /usr/lib/libthread.so.1
    libc.so.1 =>     /usr/lib/libc.so.1
    libgcc_s.so.1 =>         /usr/lib/libgcc_s.so.1
    libm.so.2 =>     /usr/lib/libm.so.2
    /platform/SUNW,Sun-Fire-V240/lib/libc_psr.so.1

    ldd /data/nan/mysql-connector-odbc-5.2.4-src/lib/libmyodbc5a.so
    libodbc.so.2 =>  /usr/lib/libodbc.so.2
    libthread.so.1 =>        /usr/lib/libthread.so.1
    libm.so.2 =>     /usr/lib/libm.so.2
    libodbcinst.so.2 =>      /usr/lib/libodbcinst.so.2
    libgcc_s.so.1 =>         /usr/lib/libgcc_s.so.1
    libltdl.so.7 =>  /usr/local/lib/libltdl.so.7
    libiconv.so.2 =>         /usr/local/lib/libiconv.so.2
    libc.so.1 =>     /usr/lib/libc.so.1
    /platform/SUNW,Sun-Fire-V240/lib/libc_psr.so.1

アプリケーションの起動時に MySQL サーバーに接続できない場合があります。ログは次のようになります。

[ODBC][6738][1361325895.588941][SQLConnect.c][1111]Can't open lib '/data/nan/mysql-connector-odbc-5.2.4-src/lib/libmyodbc5a.so' : file not found
[ODBC][6738][1361325895.588979][SQLConnect.c][1111]Can't open lib '/data/nan/mysql-connector-odbc-5.2.4-src/lib/libmyodbc5a.so' : file not found

しばらくすると、アプリケーションは正常に実行されます。

    But if libodbc and MyODBC driver aren't dynamically linked with libltdl.so:
    ldd /usr/local/lib/libodbc.so.2
    libiconv.so.2 =>         /usr/local/lib/libiconv.so.2
    libthread.so.1 =>        /usr/lib/libthread.so.1
    libc.so.1 =>     /usr/lib/libc.so.1
    libgcc_s.so.1 =>         /usr/local/lib/libgcc_s.so.1
    libm.so.2 =>     /usr/lib/libm.so.2
    /platform/SUNW,UltraAX-i2/lib/libc_psr.so.1

    ldd /data1/susie/mysql/tools/test_static_modify/mysql-connector-odbc-5.2.3-src/lib/libmyodbc5a.so
    libodbc.so.2 =>  /usr/local/lib/libodbc.so.2
    libthread.so.1 =>        /usr/lib/libthread.so.1
    libm.so.2 =>     /usr/lib/libm.so.2
    libodbcinst.so.2 =>      /usr/local/lib/libodbcinst.so.2
    libgcc_s.so.1 =>         /usr/local/lib/libgcc_s.so.1
    libiconv.so.2 =>         /usr/local/lib/libiconv.so.2
    libc.so.1 =>     /usr/lib/libc.so.1
    /platform/SUNW,UltraAX-i2/lib/libc_psr.so.1

アプリケーションは常に正常に動作します..

したがって、unixODBC で潜在的な問題になる可能性があると思います。誰かがそれをチェックするのを助けることができますか? よろしくお願いします!

敬具
Nan Xiao

4

1 に答える 1

0

unixODBC が行うのは、libltdl から dlopen と dlsym を呼び出すことだけです。lib に問題を引き起こしている静的要素があるのではないかと思います。外部 libltdl を使用するように unixODBC をビルドしない場合、(libtool からの) 独自のバージョンを使用するため、同じ lib をヒットすることで競合が発生する可能性があります。Solaris を使用しているとのことです。リンクしている libltdl は Sun のものですか?

興味深いのは、トラスの下で失敗することができれば、「ファイルが見つからない」原因が何であるかを確認できることです。

また、MySQL ドライバーが libltdl を使用する目的は何ですか?

于 2013-04-02T11:12:29.347 に答える