2012-01-13 5 views
0

Solaris에서 지침에 따라 exe 파일이 있습니다. 기능을 확장하기 위해 공유 라이브러리 (.so)를 추가해야합니다. 나는 lthmyplugin.so 파일을 만들고 설명대로 추가했습니다. 이제 utlity는 함수를 호출 할 때까지 완벽하게 실행됩니다. 함수를 호출 한 후에는 실패합니다.EMF 파일 (.so) 디버깅, 기호를 찾을 수 없음 VTable 오류

질문 :

  1. 디버깅 할 수있는 방법이 있나요? 내가 명령 트러스를 실행하면
  2. 는 또한 LDD -d lthmyplugin.so이 프로그램이 실패 할 수 있습니다

    symbol not found: __1cIMyPluginG__vtbl_   (./lthmyplugin.so)  
        symbol not found: __1cIThPluginG__vtbl_   (./lthmyplugin.so)  
        symbol not found: __1cOThLocalOptionsG__vtbl_   (./lthmyplugin.so)  
        symbol not found: __1cJThOptionsG__vtbl_    (./lthmyplugin.so)  
    

    제외하고 오류를 표시하지

aa.so 식별?

참고로, 내가 사용하지 않은 가상 함수를 생성 자나 소멸자

이 발견되지 않는 기호 무엇을 의미 하는가 : _를 _vtbl_을 1cIThPluginG?

감사합니다,

+0

는 cppfilt' '을 통해 이름을 실행 해보십시오. 해당 클래스의 vtable (가상 함수 디스패치 테이블)이됩니다. – Rup

+0

@Rup cppfilt를 사용할 수 없습니다. 다른 옵션이 있습니다 – AKS

+0

cppfilt가 아닌 C++ filt 여야합니다. – alanc

답변

2

당신은 그래서 파일에 의해 노출 된 기능을 확인하기 위해 nm 도구를 사용할 수 있습니다. 다음 번호로 전화 할 수 있습니다 :

nm -g lthmyplugin.so 

... 어떤 기능이 제공되는지 확인해보십시오.

그 외에도 C++로 태그를 지정 했으므로 저는 찌르다가 다음과 같이 묻겠습니다. C 스타일 호출 규칙을 지정 했습니까? 그렇지 않은 경우 이름이 불편하고 읽을 수 없게 만들고 99.9 %의 경우 unfoolable하게 만듭니다. 당신과 같이 __attribute __ ((cdecl 규칙))을 추가하여 기능을 난도질하지 GCC를 알 수 있습니다 :

int not_mangled(int some_arg) __attribute__((cdecl)) 
{ 
    return some_arg * 3; 
} 
관련 문제