나눠진 C파일을 한번에 컴파일
$ vi Makefile
// number라는 이름의 실행파일을 만들기 위해서는 : 아래가 필요하다. Target:Dep1 Dep2
number: one.o two.o main.o
gcc -o number one.o two.o main.o
one.o : one.c first.h second.h
gcc -c one.c
two.o : two.c second.h third.h
gcc -c two.c
main.o : main.c first.h
gcc -c main.c
clean:
rm number
rm one.o two.o main.o
$ make
$ make clean
CC = gcc // 변수명 CC = gcc
TARGETS = number
SOURCES = one.c two.c main.c
OBJECTS = one.o two.o main.o
CFLAGS = -02 -Wall
INCLUDE = -I.경로명 // 특정위치에 헤더 파일이 있다.
all: $(TARGETS)
$(TARGETS): $(OBJECTS)
$(CC) $(CFLAGS) $(INCLUDE) -o $(TARGETS) $(OBJECTS)
$(OBJECTS) :$(SOURCES)
$(CC) $(CFLAGS) $(INCLUDE) -c $(SOURCES)
#one.o : one.c first.h second.h
#$(CC) -c one.c
#two.o : two.c second.h third.h
#$(CC) -c two.c
#main.o : main.c first.h
#$(CC) -c main.c
clean:
rm number
rm one.o two.o main.o
오브젝트 파일을 하나로 묶어서 라이브러리로 만드는 방법
라이브러리
: 정적 라이브러리
: 현재 라이브러리를 묶어서 내가 만든 소스코드에 포함시켜서 컴파일을 하는 것
: 동적 라이브러리
: 라이브러리 자체가 컴파일을 할때 참조를 하여 위치값만 읽어들여 컴파일을 하는 것
정적 라이브러리
$ ar
r: 추가
c: 생성
s: index 생성
x: 추출
d: 제거
v: 보여줌
libmynumber.a // 정적 라이브러리의 확장자는 .a 동적 라이브러리는 .so
libxxx.so
cd - // 이전 디렉토리로 ㄱㄱ
$ ar rcsv libmynumber.a one.o two.o
: one.o two.o 를 정적 라이브러리로 묶음
$ ar t libmynumber.a
: libmynumber.a 의 포함된 오브젝트 파일을 표시
$ gcc -o stnumber main.c -L.libmynumber.a
: 현재 라이브러리를 -L. 옵션으로 경로 지정
$ ./stnumber
: 정적 라이브러리이기 때문에 라이브러리를 지워도 실행이 된다.
동적 라이브러리
$ gcc -c -fPIC one.c two.c
| 명령어 | 컴파일 | 동적라이브러리 코드분리 생성 | 소스이름|
$ gcc -o dynumber main.c -L. libnyshared.so
| 명령어 | 오브젝트 | 실행파일 이름 | 소스이름 | 라이브러리 경로이름|
cp libmyshared.so /lib
: /lib 로 라이브러리 이동
'이전것 > LINUX' 카테고리의 다른 글
device driver (2) (0) | 2016.05.16 |
---|---|
device driver (0) | 2016.05.09 |
압축 (0) | 2016.03.21 |
퍼미션 (0) | 2016.03.21 |
링크파일 (0) | 2016.03.21 |