정적 라이브러리 만들어보기
라이브러리란, 다양한 오브젝트 파일들을 포함하는 하나의 파일로 정적 라이브러리와 동적 라이브러리로 나뉜다.
정적 라이브러리는 라이브러리, 오브젝트파일들을 link해서 하나의 실행파일 안에 포함시킨다. 이 방식으로 (.out) 실행파일이 만들어진다.
1. func1.c func2.c 라는 함수 모듈 만들기
$ vi func1.c
$ vi func2.c
그 안에는 함수 만들기(C언어 이용)
2. 헤더파일 만들기(조건부 컴파일)
$ vi funcs.h로 편집창을 켠 뒤, 위와 같이 입력한다. 한번만 include하기 위해 #ifndef를 이용.
$ mkdir include include라는 폴더를 만들고
$ mv funcs.h include 그 안에 funcs.h를 저장한다.
l #ifndef: 매크로 이름이 선언되어 있지 않을 경우에 매크로를 정의한다.
l #ifdef: 매크로가 정의되어있으면 컴파일을 수행한다.
3. Myapp.c에서 main 만들기. 직접 만든 함수라이브러리를 사용한다.
#include "funcs.h" <- 직접 만든 라이브러리
이제 hi 와 name 함수를 사용 가능
4. 다른 라이브러리 추가 없이 직접 만든 코드의 .o 파일을 만든다.
$ gcc-c func1.c $ func1.o 생성
$ gcc-c func2.c $ func2.o 생성
5. 여러 오브젝트 파일 여러 개를 하나로 묶어서 zip파일 만들듯이(오브젝트파일 연속 입력).
$ ar rv libfuncs.a func1.o func.o
func1.o, func2.o 파일을 “하나로 묶어” libfuncs.a라는 정적 라이브러리(.a)를 만든다.
$ mkdir lib
$ mv libfuncs.a lib
여기서 만들어지는 libfuncs.a 파일을 lib폴더를 만들어 이동시킨다. (mkdir, mv 사용)
6. Main이 들어있는 myapp.c 파일을 생성.
libfuncs.a 라이브러리 안에 있는 함수들을 쓰기 위해 include.
7. $ gcc myapp.c -o myapp -I./include -L./lib –lfuncs
gcc: myapp.c라는 파일을 이용해,
-o: 이름을 설정하는 옵션. (myapp이라는 이름을 갖는 오브젝트파일을 만든다)
-I./include: 현재 dir에 있는 Include 폴더에서 헤더를 찾아보라는 옵션. (funcs.h)
-L./lib: 현재 dir에 있는 lib 폴더에서 라이브러리를 찾아보라는 옵션. (libfuncs.a)
–lfuncs: 오브젝트파일 myapp.o를 라이브러리 libfuncs.a와 링크하라는 옵션
8. $ ./myapp실행
9. $nm –s libfuncs.a
실제로 생성된 라이브러리./에 직접 만들 함수들이 들어가있는지, 변수들이 define됐는지 확인하는 utility.
전체 단계를 화면에 모두 출력 및 저장하는 방법
모든 단계를 저장해주는 옵션이 존재한다.
컴파일 과정을 모두 출력하고, 각 단계마다 생성되는 중간 파일은 삭제하지 않고 모두 저장하는 옵션이다.
# gcc -v --save-temps -o hello hello.c
2. --save-temps 옵션: 컴파일 과정에서 발생되는 중간 파일을 지우지 않고 저장한다.
'컴퓨터공학 > EmbededSystem sw공학' 카테고리의 다른 글
[실습] 간단한 UpDown Game (0) | 2018.09.18 |
---|---|
3. shell script 에서 반복문 (0) | 2018.09.18 |
2. shell script에서 조건문 (0) | 2018.09.17 |
1. Linux 편집기 기본 사용법 (0) | 2018.09.17 |