정적 라이브러리, 동적 라이브러리
- 컴파일 시점:
- 정적 라이브러리: 컴파일 시 라이브러리 코드가 실행 파일에 포함됨.
- 동적 라이브러리: 컴파일 시 라이브러리 참조만 포함되고, 실행 시 로드됨.
- 배포:
- 정적 라이브러리: 별도로 라이브러리를 배포할 필요 없음.
- 동적 라이브러리: 라이브러리를 별도로 배포하거나, 시스템에 미리 설치되어야 함.
- 파일 크기:
- 정적 라이브러리: 실행 파일 크기가 큼.
- 동적 라이브러리: 실행 파일 크기가 작음.
- 유연성 및 유지보수:
- 정적 라이브러리: 라이브러리 수정 시 프로그램을 다시 컴파일해야 함.
- 동적 라이브러리: 라이브러리를 교체하면 프로그램을 다시 컴파일하지 않아도 됨.
- 동적 라이브러리 예제
공유 라이브러리를 handle에 지정해주고
dlsym으로 지정해둔 메서드를 가져와서 사용할 수 있다
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <gnu/lib-names.h>
int main(void)
{
void *handle;
int (*add) (int, int);
int (*multiply)(int, int);
char *error;
handle = dlopen("/home/hoshi03/lib/libcalc.so", RTLD_LAZY);
if (!handle)
{
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
dlerror(); /* Clear any existing error */
add = (int (*)(int, int))dlsym(handle, "add");
multiply = (int (*)(int, int))dlsym(handle, "multiply");
error = dlerror();
if (error != NULL)
{
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
printf("%d\n", (*add)(2,5));
printf("%d\n", (*multiply)(2,5));
dlclose(handle);
exit(EXIT_SUCCESS);
}
'대외활동 > 시스템프로그래밍' 카테고리의 다른 글
시험대비 c++ 복습 (0) | 2024.08.25 |
---|---|
시험대비 C 복습 (0) | 2024.08.23 |
0822 gdb, core, valgrind (0) | 2024.08.22 |
보이드 포인터, 함수 포인터 복습 (0) | 2024.08.21 |
리눅스 쉘 스크립트 조건문 (0) | 2024.08.21 |