2009-07-29 1 views
0

첫 번째 줄이 내 공유 객체를로드하기 위해 dlopen을 호출하는 테스트에 사용하는 일부 C++ 코드가 있습니다. 나는 다음과 같은 오류 얻을이 줄 타격시 : 나는 메모리를 올렸습니다dlopen에 대한 오류 : St9bad_alloc

Terminate called after throwing an instance of std::bad_alloc: 
    what() : St9bad_alloc 

를 (무료 -m 지금은 내 EXE가 GDB에로드 될 때 무료 ~ 120MB의가 있다고보고)와 나는 여전히 같은 수 메시지.

다른 원인이 될 수있는 사람이 있으면 & 해결할 수있는 방법은 무엇입니까?

답변

0

아마도 모든 종속성을 찾을 수 없기 때문일 수 있습니다.

디렉토리를 응용 프로그램이있는 디렉토리로 변경하십시오.
그런 다음로드하려는 공유 라이브러리에서 nm을 사용하십시오 (코드에서 사용한 것과 같은 경로).
누락 된 종속성이 표시됩니다.

2

제 생각에 dlopen은 아무 관련이 없습니다. dlopen()은 C 언어 함수이며 예외를 throw 할 수 없습니다. 실제로 던질 수있는 것은 공유 객체의 초기화 함수 (예 : 정적 객체에 지정한 표현식)입니다. 당신이 당신이로드하는 공유 객체에서 작성하는 경우 예를 들어,이 bad_alloc 뿐이다과 충돌 할 수 있습니다 :

// dso.cpp start 
#include <dso.h> 

Object* instance = new Object(); 

// the rest of the file 

그러나 dlopen이 물건은 전혀 무관하다, 나는 가정한다.