오류는 dlopen(), dlsym() 또는 dlclose()에 대한 마지막 호출의 오류를 설명하는 문자열을 반환하는 dlerror()를 호출하여 보고할 수 있습니다. 한 가지 이상한 점은 dlerror()를 호출한 후 다른 오류가 발생할 때까지 dlerror()에 대한 이후 호출이 NULL을 반환한다는 것입니다. 다음은 dlopen(3)의 맨 페이지의 예입니다. 이 예제에서는 수학 라이브러리를 로드하고 2.0의 코신을 인쇄하고 모든 단계(권장)에서 오류를 확인합니다: POSIX.1-2001은 dlclose(), dlerror(), dlopen(), dlsym() 및 dlsym()을 설명합니다. dlopen(3) 맨 페이지입니다. 그것은 목적과 dlopen API의 사용을 설명합니다. 개별 DLOPEN 함수를 참조하기 위해 „dlopen”을 사용하고 전체 API를 참조하기 위해 „dlopen API”를 사용합니다. 5.2. Windows LoadLibrary API에 대한 일종의 dlopen 호환 래퍼가 있습니까? 이전 시스템에서 라이브러리가 _init라는 루틴을 내보내는 경우 해당 코드는 dlopen() 반환 전에 실행됩니다. 사용자 고유의 라이브러리에서 이 사실을 사용하여 초기화 루틴을 구현할 수 있습니다. 그러나 라이브러리는 _init 또는 _fini라는 루틴을 내보내서는 안 됩니다. 이러한 메커니즘은 더 이상 사용되지 않으며 원치 않는 동작이 발생할 수 있습니다.

대신 라이브러리는 __attribute__(생성자)) 및 __attribute__(소멸자)) 함수 특성(gcc를 사용한다고 가정)을 사용하여 루틴을 내보내야 합니다. 자세한 내용은 라이브러리 생성자 및 소멸자 함수라는 섹션을 참조하십시오. dlopen()의 반환 값은 다른 DL 라이브러리 루틴에서 사용할 불투명 값으로 간주되어야 하는 `핸들`입니다. dlopen()는 로드 시도가 성공하지 못하면 NULL을 반환하며 이를 확인해야 합니다. dlopen()를 사용 하 여 동일한 라이브러리를 두 번 이상 로드 하는 경우 동일한 파일 핸들이 반환 됩니다. 위의 프로그램에서는 dlopen을 사용하여 라이브러리를 로드한 다음 dlsym을 사용하여 두 액세스 함수에 대한 기호에 대한 참조를 검색한 다음 이를 통해 먼저 생성 함수를 호출하여 공유 개체의 인스턴스를 가져와 init 메서드를 호출한 다음 C++ 클래스의 메서드를 호출하는 데 사용되는 개체를 소멸시켰습니다. C++는 오버로드(이름이 같지만 다른 인수를 가진 다른 함수)를 허용하고 클래스, 멤버 함수, 예외 사양과 같이 C가 하지 않는 많은 기능을 가지고 있기 때문에 함수 이름을 단순히 기호 이름으로 사용할 수 없습니다. 이를 해결하기 위해 C ++는 함수 이름과 필요한 모든 정보 (예 : 인수의 수 및 크기)를 컴파일러만 알고있는 이상한 문자열로 변환하는 소위 이름 mangling을 사용합니다. foo의 망가진 이름은 foo@4%6^처럼 보일 수 있습니다. 또는 „foo”라는 단어를 포함하지 않을 수도 있습니다. 이 문서, C ++ dlopen 미니 하우토, 아론 이소튼에 의해 저작권 (c) 2002-2006.

2010 © Copyright Fundacja Projekt Kultura