2013-02-25 4 views
0

모든 :unixodbc가 ltdl 라이브러리와 동적으로 링크되었을 때의 문제점은 무엇입니까?

내가 솔라리스 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에 잠재적 인 문제가 될 것 같아요 .. 항상 확인을 실행합니다. 아무도 그것을 확인하는 데 도움이 될 수 있습니까? 대단히 감사드립니다!

안부
할머니 샤오 모든 인 unixODBC가하는

답변

0

가 호출 dlopen을하고 libltdl을에서 dlsym을 사용하여, 나는 문제의 원인이되는 LIB에 약간의 정적이 있다면 궁금합니다. unixODBC를 빌드하여 외장 libltdl을 사용하지 않는다면 (libtool에서) 자체 버전을 사용하므로 다시 동일한 lib를 사용하는 충돌이 발생할 수 있습니다. 당신은 솔라리스를 사용하고 있다고 말합니다. Sun과 링크하고있는 libltdl입니까?

흥미로운 점은 truss에서 오류가 발생하여 "파일을 찾을 수 없음"이 무엇인지 알 수 있습니다.

또한 MySQL 드라이버가 libltdl을 사용하는 것이 궁금합니다.

+0

: 답장을 보내 주셔서 감사합니다. 추가 실험이 끝난 후이 문제는 libltdl과 관련이없는 것으로 나타났습니다. 트러스 명령 출력을 잡으려고합니다. –

+0

트러스 로그를 사서함 ([email protected])으로 보냈습니다. 확인해 주셔서 감사합니다. 대단히 감사합니다! –

+0

이 문제의 근본 원인은 founa 였고 unixodbc 2.3.2 사전로드 덕분에 해결되었습니다! 감사합니다! –