|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
1.ar r mylib.a *.o 오브젝트 파일을 하나로 묶는다
ls해보면 mylib이라는 파일이 생겨버렸다.
.a파일을 만들어서 정적라이브러리로 만들어서 쓸수 있다.
1
2
3
4
5
6
7
------------------------------------------------------------------------------------------------
정적 라이브러리
장점
컴파일 하는 경우 속도가 빠름
단점
사이즈가 큼
동적 라이브러리
장점
사이즈가 작음
단점
컴파일 하는 경우 속도가 느림
바이너리를 배포할 때 컴파일 할 당시에 사용한 공유 라이브러리와 같은 메이저 버전을 가지고 공유 라이브러리가 있는 시스템에서만 동작 함
---------------------------------------------------------------------------------------------------------------
공유 라이브러리의 추가 장점
라이브러리 변경 시 정적 라이브러리는 컴파일한 모든 파일들을 바꾸어야 하지만 공유 라이브러리는 공유 라이브러리만 바꾸어 주면 된다.
이유 : 공유 라이브러리는 실행 시 공유 라이브러리와 링크 되기 때문
---------------------------------------------------------------------------------------------------------------
오브젝트 만들기
gcc -fPIC -c plus.c minus.c
-fPIC : cc1 컴파일러에게 위치(메모리)에 관계 없이 수행되는 코드로 컴파일 하라는 옵션
파일이 어떻게 돌아갈지 모르기때문에
---------------------------------------------------------------------------------------------------------------
라이브러리 만들기 (인덱스 과정 불필요)
gcc -shared -Wl,-soname,libmy.so.0 -o libmy.so.0.0.0 plus.o minus.o
-shared : shared object를 생성하라는 옵션
-Wl: -Wl옵션 뒤에 오는 옵션 들을 링커에게 바로 전달하라는 옵션
-soname,libmy.so.0 : 동적 링커에게 soname libmy.so.0와 같은 형식으로 바로 전달
---------------------------------------------------------------------------------------------------------------
라이브러리를 만든 후 libmystuff.so.0.0.0의 심볼릭 링크를 만들기
ln -s libmy.so.0.0.0 libmy.so.0
--> 동적 링크를 위한 파일
ln -s libmy.so.0.0.0 libmy.so
--> gcc 링크를 위한 파일
---------------------------------------------------------------------------------------------------------------
동적 링커(/lib/ld-linux.so.2)가 찾을 수 있도록 디렉토리 설정하기
/etc/ld.so.conf 파일을 열어 libmy.so.0.0.0 파일이 있는 디렉토리를 추가한다.
/etc/ld.so.conf에 지정된 디렉토리를 찾아 다니면서 새로운 심볼릭 링크를 만들고 동적 링커가 읽어 들이는 /etc/ld.so.cache 파일을 새로 갱신한다.
ldconfig
/usr/lib 디렉토리에 만든 라이브러리를 복사하면 위의 절차는 필요가 없다.
---------------------------------------------------------------------------------------------------------------
만든 라이브러리 사용하기 (.a와 .so가 둘 다 있으면 .so를 선택)
gcc -o 16_9 16_9.c -lmy -L.
sokoban's Blog is powered by Daum & Tattertools