2012-01-22 2 views
0

ltdl이 내 라이브러리를로드하지 못하는 이유를 디버깅하는 데 필요한 통찰력이나 방법을 제공 할 수 있습니까? 부분 strace 출력에서 ​​볼 수 있듯이 라이브러리를 여는 데 성공한 다음 file not found을보고 한 다음 동일한 방법으로 빌드 된 다른 라이브러리를 성공적으로로드합니다. 어떻게 디버깅 할 수 있습니까? 나는 오랫동안 인터넷 검색을 해왔고 디버깅에 유용한 방법을 찾지 못했습니다. 그것은 동적 라이브러리를로드하는 데 실패 할 때마다libtool이 라이브러리를로드하지 못했습니다.

open("server/modules/smtp.la", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("server/modules/smtp.so", O_RDONLY) = 3 
getcwd("/home/david/Documents/workspace/dvnmon", 128) = 39 
1327209900.751672 3602 Failed to open server/modules/smtp: file not found 
open("server/modules/snmp.la", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("server/modules/snmp.so", O_RDONLY) = 3 
getcwd("/home/david/Documents/workspace/dvnmon", 128) = 39 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
open("/usr/lib64/libnetsnmp.so.15", O_RDONLY) = 3 
open("/usr/lib64/libcrypto.so.1.0.0", O_RDONLY) = 3 
open("/lib64/libz.so.1", O_RDONLY)  = 3 
1327209900.800507 3602 Plugin CSNMPMonitor interface version 0.1 loaded 

답변

3

lt_dlopen()FILE_NOT_FOUND를보고합니다. 파일이있는 경우에도 이런 일이 발생할 수 있습니다.

먼저 ldd server/modules/smtp.so의 출력과 ldd server/modules/snmp.so의 출력을 비교합니다. 어쩌면이 두 가지 중 하나에 의존성이없는 것일까 요?

export LD_DEBUG=all (자세한 내용은 man ld.so 참조)을 시도해 볼 수도 있습니다.

server/modules/의 파일이 실제로 Libtool 모듈인지 여부는 사용자의 질문에서 분명하지 않습니다. 그렇다면 *.la 파일이없는 이유는 무엇입니까? 이러한 파일은 먼저로드해야하는 종속 라이브러리를 지정할 수 있습니다.

+0

멋진 감사는 내가 필요한 것입니다. 18996 : \t 서버/모듈/smtp.so : 오류 : 기호 찾아보기 오류 : 정의되지 않은 기호 : _ZTI11CSMTPServer (치명적인) Im이 모든 모델을 같은 디렉터리에 심볼릭 링크하기 때문에 .la 파일을 찾을 수 없습니다. .la 파일은 작동하지 않지만 실제 파일을 가리 키거나 해당 디렉토리에 복사하면 smtp 파일을로드하지 못합니다. 누락 된 기호는 유틸리티 .a 파일을 사용하여 프로그램을 분리하고 부모 프로그램이 컴파일 될 때 해당 기호를 분명히 남겨 두는 것과 관련이 있습니다. –

관련 문제