Excuse the ads! We need some help to keep our site up.
List
Static Library
설명
- 정적 라이브러리(Static Library)는 여러 오브젝트 파일을 하나의 아카이브 파일(.a)로 만든 것입니다.
- 정적 라이브러리를 사용하는 실행 파일을 빌드 할 경우 정적 라이브러리의 코드를 복사하여 실행 파일을 만든다.
- 정적 라이브러리를 이용해 여러 프로그램을 빌드 하게 되면 모든 파일에 똑같은 정적 라이브러리 함수의 코드가 포함됩니다.
Example
Source code(Shared library)
lazenca.c
#include <stdio.h> void lazenca(int a){ printf("lazenca.0x%d\n",a); }
Source code(executable)
test.c
#include <stdio.h> void main(){ lazenca(10,10); }
Build
- gcc의 -c 옵션을 사용하여 오브젝트 코드 생성
- ar 프로그램을 이용하여 라이브러리 파일(.a) 생성
Build Command
lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$ gcc -c lazenca.c lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$ ar vr libstatic.a lazenca.o ar: creating libstatic.a a - lazenca.o lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$ gcc -o testStatic test.c libstatic.a test.c: In function 'main': test.c:4:5: warning: implicit declaration of function 'lazenca' [-Wimplicit-function-declaration] lazenca(10,10); ^ lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$
Run
프로그램 실행
lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$ ./testStatic Lazenca.0x10 lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$
Check for shared library in the executable file
- 해당 파일은 Shared library가 아닌 Static library를 사용하고 있기 때문에 ldd 명령어로 확인되지 않습니다.
lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$ ldd ./testStatic linux-vdso.so.1 => (0x00007ffdad1f7000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc279822000) /lib64/ld-linux-x86-64.so.2 (0x00005626edadf000) lazenca0x0@ubuntu:~/Documents/Definition/protection/PIC$
Related information
- N/a