2012-08-26 5 views
0

Linux에서 다음과 같은 문제가 발생했습니다. 외부 라이브러리를 사용하는 일부 응용 프로그램이 있습니다. 응용 프로그램은 외부 라이브러리와 연결되어 있지 않습니다. 도서관을 dlopen으로 열고 그 중 일부 기호를 사용합니다. 라이브러리를 dlclose으로 언로드하려고 시도 할 때 문제가 발생했습니다. 아직 라이브러리가 /proc/.../maps에로드 된 것을 볼 수 있습니다. 시도를 통해dlclose로 공유 라이브러리를 닫을 수 없습니다.

더 많은 다음 사용 :

... 
while(dlclose(module) == 0); 
... 

는 무한 루프로 연결 라이브러리는 여전히로드됩니다.

라이브러리 보유자를 확인하거나 찾을 수있는 방법이 있습니까? "남자 우 dlclose"에서

+0

그렇게 많이 신경 쓸 필요가 없습니다. 사실, 수천 개의'dlopen'-ed 공유 객체가있는 경우에도'dlclose'를하지 않는 것이 좋습니다. –

답변

2

: 당신은 가능성이 가장 높은로 충돌 "다른로드 라이브러리 기호를 사용하지 않습니다"조항의 실행

The function dlclose() decrements the reference count on the dynamic 
library handle handle. If the reference count drops to zero and no 
other loaded libraries use symbols in it, then the dynamic library 
is unloaded. 

.

가장 좋은 방법은 LD_DEBUG=bindings으로 실행하고 언로드 할 라이브러리에 바인딩 할 다른 라이브러리를 확인하는 것입니다.

도 참조하십시오. this 질문.

관련 문제