2013-02-20 2 views
0

C++ 프로그램에서 dlopen() 함수를 사용하여 공유 라이브러리를로드하는 중입니다.dlopen을 사용하여 공유 라이브러리가 성공적으로로드되었는지 또는로드되지 않았는지 확인하는 방법은 무엇입니까?

그런 다음 확인하는 방법은 성공적으로로드 되었습니까? 또는 해당 라이브러리에있는 모든 함수의 이름을 사용하여 라이브러리로드를 확인할 수 있습니까? manual page에서

+0

dlopen 함수는 오류가 발생하면 NULL을 반환하고 찾고있는 것은 무엇입니까? 자세한 설명은 dlopen의 맨 페이지를 참조하십시오. – SeedmanJ

답변

1

: 어떤 이유로 실패()

하면 dlopen을, 그것은 NULL을 반환한다.


dlsym 기능은 extern "C"를 선언하지 않는 한, C++ 식별자를 처리하거나하여 변환 된 이름을 사용하지 않을 수 있습니다.

1

성공적으로로드되지 않은 경우 dlopen()은 NULL을 반환합니다.

dlopen을위한 매뉴얼 페이지() 말한다 :

반환 값 파일을 찾을 수없는 경우, 읽기 위해 열 수 없습니다

,하지 처리를 위해 적절한 객체 형식으로하다 dlopen() 또는 파일을로드하거나 기호 참조를 재배치하는 과정에서 오류가 발생하면 dlopen()은 NULL을 반환합니다. 자세한 진단 정보는 dlerror()를 통해 제공됩니다.

0

설명서 (http://linux.die.net/man/3/dlopen)에 따르면 dlopen은 모든 실패시 NULL을 반환합니다. 그래서 당신은 그것을 확인하고 끝낼 수 있습니다. 그러나 어떤 이유로 도서관이 "좋은"도서관이라고 믿지 않는다면, 자신의 시스템을위한 자체 규정을 정의 할 수 있습니다. 예를 들어 시스템에서로드 할 수있는 모든 라이브러리가 호환 라이브러리를 작성하려는 사용자에게 할당 할 수있는 "API 키"와 같은 것을 포함하여 특정 속성을 갖는 특정 이름의 심볼을 정의하도록 요구할 수 있습니다.

0

dlopen에서 오류가 발생하면 NULL을 반환하고 dlerror는 해당 오류 메시지를 반환합니다.

0

dlopen()이 실패 할 경우 언급 한 모든 사항이 null이되지만 지정한 경로에 라이브러리가 있어도 왜 신비한 null이 발생 하는지를 해결하려는 경우 모든 라이브러리가 시스템에 있는지 확인하십시오. "특정 라이브러리"가 종속되어 있는지 확인하십시오. 그렇지 않으면 NULL로 호출하지 못합니다.)

.cpp 파일의 함수에 extern "C"를 사용하여 컴파일러가 압축하지 않고 한 번 호출 할 수 있습니다 라이브러리가로드되었습니다.

관련 문제