일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- react
- 상태
- 소수
- 확률
- 강화학습
- 반응형 웹
- CSS
- 수학
- transform
- 통신사할인
- 포토샵
- grid
- spring
- Javascript
- pandas
- stl
- Prefix Sums
- box-sizing
- c
- Gap
- Codility
- 미디어 쿼리
- SK바이오사이언스
- REM
- float
- c++
- 알고리즘
- Photoshop
- skt membership
- 백준
Archives
- Today
- Total
sliver__
[Static and Shared Library] - Static Library 개념 / ar 명령어 본문
728x90
[Static Library]
- static library는 archive file을 함께 모아놓은 object module의 집합이다.
- object code를 link time에 함께 코드와 link 한다.
[Examining the Process Memory Image]
- 위 그림은 Linix에서 프로그램 memory image가 할당되는지 보여준다.
- memory의 위 부분은 환경변수 지역이다.
- 바로 아래는 스택의 top 부분이고 UNIX platform에서는 아래로 증가한다.
- stack의 가장 아래부분은 할당되지 않은 메모리의 여유 공간이다.
- 왼쪽 박스들은 static library module과 object module의 linking process를 보여준다.
- 화살표들은 linker가 0x800000번지부터 0x80049F18번지까지 메모리를 형성하는지 보여준다.
- 해당 지역들은 실행 가능한 파일들이 저장되있는 공간이다.
- 0x800000 번지 아래 지역은 프로그램이 시작됄 때 메모리 공간으로 가져오기 위해 dynamic libraries 들을 위한 예약된 공간이다.
- 해당 지역은 shared data들이 load되기 위한 공간이다.
- main program 하위의 libarary code는 static library code 라고 부른다.
- static 한 이유는 program이 link 되면 절대 변하지 않기 때문이다.
- shared libarary는 0x800000번지 아래에 exection time에 load된다.
- 만약 shared library 들을 바꾸면 프로그램에 변경된 library들이 해당 공간에 load 된다.
- static library code는 executable 파일에 적히면 절대 변하지 않는다.
[static library 생성]
ar -r libpasswd.a import.o getuid.o
- -r 옵션 : 필요한 경우 archive가 생성되고 이미 존재하는 경우 target module을 추가 또는 업데이트 하는 옵션
- archive는 .a를 사용하고 covention은 lib를 붙인다.
- archive를 위한 target module에 수정이 있다면 해당 module만 다시 archive 하면 된다.
$ ar -t libpasswd.a
import.o
getuid.o
$
- -t 옵션 : 어떤 module이 archive에 포함되어있는지 보는 옵션
$ ar -tv libpasswd.a
rw-r----- 1001/2010 2536 May 11 12:18 2000 import.o
rw-r----- 1001/2010 2948 May 11 12:18 2000 getuid.o
$
- -tv 옵션 : archive된 module list와 더 자세한 정보를 확인하는 옵션
- 1001 / 2010 은 userID / group ID number 이다.
[Linking with Static Libraries]
$ cc -o getuid main.o libpasswd.a -lstdc++
- -l 옵션을 주어 링킹할 수 있다.
- 주어진 *.o object 파일과 static library를 linking 한다.
$ make getuid
cc -c -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -Wall -fhandle-exceptions main.cc
cc -o getuid main.o -L/home/me/myproject -lpasswd -lstdc++
$
- 보통 shared libarary 들은 한 디렉토리 안에 관리되고 -L 옵션을 주어 디렉토리가 있는 경로를 알려준다.
- -lpasswd는 linker에게 libpasswd.a 라이브러리를 찾을 수 있도록 알려준다.
- 위는 linking process를 보여준다.
728x90
'CS > UNIX' 카테고리의 다른 글
[Static and Shared Library] - Static / Shared Library 비교 (0) | 2022.10.22 |
---|---|
[Static and Shared Library] - Shared Library / ldd 명령어 (0) | 2022.10.22 |
[Directory Management] - chdir / fchdir 함수 (0) | 2022.10.21 |
[Directory Management] - getcwd / getwd (0) | 2022.10.19 |
[Manage Files] - pathconf / fpathconf 함수 (1) | 2022.10.19 |
Comments