unixodbc与ltdl库动态链接时的问题?

时间:2013-02-25 08:23:12

标签: mysql dynamic libtool unixodbc

所有

我在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的一个潜在问题。任何人都可以帮忙检查一下吗?非常感谢提前!

最诚挚的问候  南萧

1 个答案:

答案 0 :(得分:0)

所有unixODBC都是从libltdl调用dlopen和dlsym,我想知道lib中是否存在一些导致问题的静态。如果你不构建unixODBC来使用exernal libltdl它使用自己的版本(来自libtool),那么再次,它们可能与它们发生冲突,同时命中同一个lib。你说你正在使用Solaris。您要与Sun链接的libltdl是什么?

可能有趣的是,如果你能在truss下失败,那么我们就可以看到“找不到文件”的原因了。

我也想知道MySQL驱动程序使用libltdl的原因是什么?