dlopen()
에 대한
감사는 void *
포인터를 반환한다. 포인터는 다른 동적 연결 로더 함수로 전달되는 핸들입니다. 따라서 반환 유형을 void *
으로 변경하십시오.
void *lib = dlopen(...)
lib
을 확인하면 라이브러리가 제대로 열렸는지 확인할 수 있습니다. lib
이 NULL이면 라이브러리를 열지 못했습니다. lib
이 NULL이 아니면 라이브러리가 성공적으로 열립니다. dlerror()
을 사용하면 라이브러리가 열리지 않은 이유에 대한 텍스트 오류 문자열을 얻을 수 있습니다. RTLD_NOLOAD
플래그가 설정되어, dlopen()
실제로 라이브러리를 엽니되지 않습니다
void *lib = dlopen(...)
if (lib == NULL) {
fprintf(stderr, "Shared library failed to open: %s\n", dlerror());
exit(1);
}
참고 : 예를 들면. 매뉴얼 페이지에서 :
라이브러리를로드하지 마십시오. 이것은 라이브러리가 이미 상주하는지 테스트하는 데 사용할 수 있습니다 (dlopen()이 없으면 NULL을 반환하고 없으면 NULL을 반환합니다). 이 플래그는 이미로드 된 라이브러리의 플래그를 승격시키는 데에도 사용할 수 있습니다. 예를 들어 이전에 RTLD_LOCAL로로드 된 라이브러리는 RTLD_NOLOAD | RTLD_GLOBAL. 이 플래그는 POSIX.1-2001에 명시되어 있지 않다.
원하는 동작을 사용하려면 RTLD_NOLOAD
을 삭제해야 할 수도 있습니다.
'dlopen()'이 NULL을 반환하지 않으면 제대로 열립니다. –