23.11.16 최초 작성
.o)들의 복사본lib'이름'.aar <options> <archive> <object-file..>
ar libdemo.a mod1.o mod2.o mod3.o //생성
ar tv libdemo.a //libdemo.a 내용 출력
ar d libdemo.a mod3.o //mod3.o 제거
gcc -g -o prog prog.o libdemo.a
gcc -g -o prog prog.o -ldemo //표준 라이브러리(/usr/lib)에 있는 경우
gcc -g -o prog prog.o -Lmylibdir -ldemo //표준 라이브러리에 없는 경우
gcc -g -c -fPIC -Wall mod1.c mod2.c mod3.c
gcc -g -shared -o libfoo.so mod1.o mod2.o mod3.o //2번에 걸쳐 만들기
gcc -g -fPIC -Wall mod1.c mod2.c mod3.c -shared -o libfoo.so
//1번에 걸쳐 만들기
export LD_LIBRARY_PATH='라이브러리가 위치하는 디렉토리'
gcc -g -Wall -o prog prog.c libfoo.so
gcc -g -o prog prog.o -ldemo //표준 라이브러리(/usr/lib)에 있는 경우
gcc -g -o prog prog.o -Lmylibdir -ldemo //표준 라이브러리에 없는 경우
libdemo.so.<major number>.<minor number>.<number>
dlopen, dlclose : 동적 라이브러리를 적재 / 해제하는 함수#include <dlfcn.h>
void *dlopen(const char *libfilename, int flags);
///
libfilename : 로드할 동적 라이브러리 파일명
flag : so 파일을 메모리로 적재하는 방법 또는 시점과 관련된 설정값
Return : 라이브러리에 대한 handle 반환
(NULL : Fail)
int dlclose(void *handle);
///
handle : dlopen에서 반환받은 shared object handle
Return
(0 : Success, else : Fail)
dlerror : dlopen에 대한 에러메시지 반환#include <dlfcn.h>
const char *dlerror(void);
///
Return
마지막 dlerror 호출 이후, dlopen 호출에서 발생한 에러 상황에 대한 사유를 문자열로 반환
(만약 에러가 발생한 적이 없을 경우 NULL이 반환)
dlsym : 동적 라이브러리의 심볼(함수/변수명) 가져오는 함수#include <dlfcn.h>
void *dlsym(void *handle, const char *symbol)
///
handle : dlopen에서 반환받은 동적 라이브러리 handle
symbol : shared object에서 찾고자 하는 함수명 또는 변수명
Return
(NULL : Error, else : Success)
ldd <프로그램 이름>