Yenarue's Log Generalist Software Engineer :-)

[C] dlopen, dlsym, dlerror, dlclose

|

dlopen, 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