라이브러리의 동작과 제작
- 개발자라면?/Linux
- 2022. 9. 2.
Linking
링킹의 역할
- Library 연결 (포함X)
- Address mapping (Embedded 에서는 mapping 까지 고려해야 함)
링킹의 종류
- Static Linking
- 리눅스는 Static Library 를 사용 (lib.a)
- Linker 가 library 를 통채로 넣는 것 (Embedded or RTOS 등에서 사용)
- Dynamic Linking
- 리눅스는 Shared Library 를 사용 (lib.so / shared object)
- dynamic linking 목적
- 메모리 낭비를 방지
- 실행 파일을 만들 때, 링크할 라이브러리 중 일부만 사용한다면 모두 포함해서 컴파일하는 것은 낭비
- 컴파일할 때는 전체를 넣는 것이 아닌 Linking 할 Library 의 정보만 추가해준다 (directory 등)
- 실행할 때는 Library 의 정보를 참조해서 RAM 에 올려준다
이 때, 다른 프로그램에서도 같은 library 를 참조하면 RAM 에 추가할 필요 없이 공유할 수 있도록 해줌 (Kernal)
Library
* 리눅스에서는 library 의 확장자를 중요하게 보는 편 (.a / .so)
Static Library 제작 및 동작
이 후 라이브러리의 표준 directory 에 옮기지 않으면 아래와 같은 오류가 발생한다
이 때는 /usr/lib 로 옮겨주고, permission을 수정해주면 된다.
이 후 빌드를 하면 정상 동작!!
단, 이 중 하나라도 dynamic library 가 있으면 아래처럼 dynamic 이 검색됨
static 이므로 빌드 후에 표준 directory 에 복사한 library를 지워도 프로그램은 정상 실행된다!!
Shared Library의 제작 및 동작
제작
공유 라이브러리를 사용한 응용 프로그램 실행파일 만들기
공유 라이브러리를 사용한 응용 프로그램 실행파일 만들기
LD_LIBRARY_PATH 를 설정하지 않으면 아래처럼 경로가 비어있으므로 ./a.out 이 실행되지 않음
아래 처럼 정의를 해줘야 정상 실행이 가능하다
<???>
Runtime library
'개발자라면? > Linux' 카테고리의 다른 글
Make 빌드 시스템 2 (0) | 2022.09.02 |
---|---|
Make 빌드 시스템 1 (0) | 2022.09.02 |
GNU (0) | 2022.09.02 |
쉘 & 쉘스크립트 (0) | 2022.09.01 |
리눅스 아키텍처와 명령어 (Ft. file system) (0) | 2022.09.01 |