[C] dlopen, dlsym, dlerror, dlclose
2012년 06월 23일 | C sodlopen, dlsym, dlerror, dlclose 를 공부하면서 본 코드.
이 포스팅은 기존 개발 블로그에서 백업한 포스팅입니다.
- 원문 : https://syung1104.blog.me/160486923
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main(int argc,char *argv){
void *handle;
double (*cosine)(double);
char *error;
handle=dlopen("./../../../../lib/libm.so.6",RTLD_LAZY);
if ( !handle) {
fputs(dlerror(),stderr);
exit(1);
}
cosine = dlsym(handle, "cos");
if ((error = dlerror()) !=NULL){
fputs(error,stderr);
exit(1);
}
printf("%f\n", (*cosine)(2.0));
dlclose(handle);
return 0;
}
dlopen
void * dlopen(const char *filename, int flag);
dlopen함수는 라이브러리를 열고 그것이 사용되도록 준비시킨다.
반환값으로는 라이브러리의 핸들값을 리턴한다.
dlsym
void * dlsym(void *handle, char *symbol);
dlsym함수는 dlopen으로 열린 라이브러리의 심볼의 값을 찾아준다.
심볼이 없다면 NULL을 리턴한다.
dlerror
dlerror함수는 에러의 스트링을 반환한다.
dlclose
dlclose는 dlopen으로 연 라이브러리를 닫아준다.
컴파일
컴파일을 할 때는 gcc에 -ldl 을 붙인다.
$ gcc -m32 -o dllib DL_library_ex.c -ldl
참고자료
http://wiki.kldp.org/HOWTO/html/Program-Library-HOWTO/dl-libraries.html
Comments