# 이 글은 싸이월드 블로그에 내가 작성했던 글을 옮겨온 글이다. #
정적라이브러리 | 공유라이브러리 | |
확장자 | .a | .so(IBM) 이나 .sl(HP) |
라이브러리 로직변경시 반영방법 | 재컴파일 후 재실행 | 컴파일 없이 재실행 |
작성방법 | ar | cc |
실행속도 | 상대적 빠름 | 상대적 느림 |
.a[정적라이브러리]
: 컴파일 시간에 코드를 포함하여 결정하기 때문에 정적 라이브러리라고 함.
test.o 파일과 app.o 파일이 생기는데 test.o 파일을 Archive로 묶어 보자. 라이브러리 파일의 작명법은 lib뒤에 이름을 붙이는 것이다.
# ar cr libtest.a test.o
libtest.a 파일이 생성되었을 것이며 이 라이브러리를 사용하여 컴파일 할려면 아래와 같이 한다. -L은 라이브러리 파일의 위치를 지정하며 -ltest가 libtest.a를 지정하게 된다.
#gcc -o app app.o -L. -ltest
.so[동적라이브러리]
: 실행 시간에 라이브러리 파일을 찾아 코드를 포함하기 때문에 동적라이브러리라고 함.
즉, 정적 라이브러리는 컴파일 시간에 코드를 결정하기 때문에 소스가 변경되면 새로 컴파일 해야하지만,
동적 라이브러리의 경우 라이브러리만 교체하는 것으로도 변경이 가능하다.
# gcc -c -fPIC test.c
# gcc -c app.c
-fPIC옵션은 Position-Independent Code의 약자이며 test.o파일을 동적라이브러리로 사용하도록 컴파일 하는 옵션이다. 이렇게 컴파일된 오브젝트 파일을 .so파일로 묶으면 된다.
# gcc -shared -fPIC -o libtest.so test.o
-shared 공유 오브젝트를 생성
컴파일은 아래와 같이 하면 된다.
# gcc -o app app.o -L. -ltest
만일 libtest.a 파일과 libtest.so 파일이 같이 있을 경우 gcc 컴파일러는 libtest.so 파일을 먼저 지정하게 된다. 만일 libtest.a를 사용하여 컴파일 하고 싶으면 아래와 같이 실행하면 된다.
# gcc -static -o app app.o -L. -ltest
라이브러리
아래의 그림을 보자.
.a는 정적 라이브러리를 나타낸 것이다. 포함한다고 위에 명시 되어있다.
.so는 동적 라이브러리를 나타낸 것이고, 링크로 연결 되어진다.
'Computer > Linux-Others & Etc' 카테고리의 다른 글
fork와 thread의 메모리 공유 방식 (0) | 2013.11.05 |
---|---|
리눅스 ping 테스트하다가 network is unreachable... (0) | 2013.11.05 |
Ubuntu(우분투)에서 FTP(vsfptd Server) 설치하기 (0) | 2013.11.05 |
Ubuntu(우분투)에서 텔넷(Telnet Server) 설치하기 (0) | 2013.11.05 |
Fedora(페도라) 12에서 리눅스 텔넷 서버 설정 및 서비스 방법 (0) | 2013.11.05 |