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

  • No labels