2014년 12월 12일 금요일

Linux 라이브러리 제작 및 사용

■ 정적(static) 라이브러리 : *.a -->*.lib
a.c --> a.o + 라이브러리코드(링크할때 합쳐짐) --> a.out
b.c --> b.o + 라이브러리코드(링크할때 합쳐짐) --> b.out
 : 같은 코드들이 들어있음으로 스토리지(임베디드는 롬)를 많이 차지함.
 : 마찬가지로 실행시 램도 많이 차지함.
 : 라이브러리가 수정 필요할 경우 모두 다시 링크해야함.
 : 호출하는 코드의 위치가 이미 결정 되어있음으로.. 다이렉트 호출.. 속도가 아주약간 빠르다.
 : 단독실행 가능

▷ 정적 라이브러리 제작
ex) ar rsv libcalc.a addsub.o muldiv.o
r replace .o파일이 있으면 대체
s speed 링크 속도를 빠르게 하는 옵션.(검색정보추가)
v verbose


▷ 정적라이브러리 사용
ex) gcc -o calctest calctest.o -lcalc -L ./
-L 옵션 라이버리 경로 지정

■ 공유(shared) 라이브러리 : *.so -->*.dll
a.c --> a.o + 라이브러리 정보 --> a.out
                                       + 라이브러리 코드 (실행시점에)
b.c --> b.o + 라이브러리 정보 --> b.out


▷ 리눅스 공유 라이브러리관련 파일 종류
아래에서 31은 가리키는 경로의 글자 수 -> 심볼릭 링크
lrwxrwxrwx 1 root root    31 Dec  7  2013 libguilereadline-v-17.so -> libguilereadline-v-17.so.17.0.3
lrwxrwxrwx 1 root root    31 Dec  7  2013 libguilereadline-v-17.so.17 -> libguilereadline-v-17.so.17.0.3
-rw-r--r-- 1 root root 13856 Aug 26  2011 libguilereadline-v-17.so.17.0.3

libreadline.so : 링크할때 사용된다. (개발용)
ex) gcc -o someprog someprog.c -lreadline
gcc로 somprog.c 를 컴파일해서 someprog 실행 프로그램을 만들때 -libreadline.so을 링크해서 만들어라.

.5는 메이저 버전넘버
libreadline.so.5 : 실행 파일 내부에 저장되는 이름으로, 프로그램을 실행할 때 사용된다. (실행용)
ex) ./somprog   프로그램 실행시 내부에서 사용
 -> 리눅스는 라이브러리에 버전넘버를 가지고 있어, 라이브러리의 버전이 공전할 수 있다.
 -> 버그 패치가 쉽다.

.2는 마이너 버전넘버
libreadline.so.5.2 : 실제 라이브러리 코드를 담고 있다.(실행용)


ex) arm-none-linux-gnueabi-gcc -march=armv4t -fPIC -c addsub.c muldiv.c
PIC = Position Independent Code
-> 동적 라이브러리를 할때 필수 옵션
 -> 여러 프로그램이 공유 라이브러리를 메모리상에 올린다고 가정, 라이브러리의 주소가 다를것임.


gcc  -march=armv4t -shared -Wl,-soname=libcalc.so.1 -o libcalc.so.1.0 addsub.o muldiv.o
공유 라이브러리를 만드는 명령

ldconfig -n .
lib파일의 심볼링 링크를 생성하는 명령(실행용)

ln -s libcalc.so.1 ./libcalc.so
심볼릭 링크를 매뉴얼로 생성 (개발용)

gcc -march=armv4t -o calctest calctest.o -lcalc -L.
calctest.o 오브젝트 파일로 caltest실행파일을 만들때 libcalc 라이브러리 파일을 현재경로에서 찾아서 만들어라.
공유라이브러리나 정적라이브러리나 만드는 것은 똑같다..

※참고1 : 정적라이브러리, 공유라이브러리가 둘다 있다면 링크 우선순위는 공유라이브러리.. 윈도우랑 같음..

※참고2 : export LD_LIBLARY_PATH=/tftpboot/libtest
lib 검색 경로 환경변수 지정


※참고3 : ldd 실행파일
실행파일이 쓰고 있는 공유라이브러리목록 조회

※참고4 : 심볼링 링크.. 복사..
cp libcalc.so.1 /usr/lib  심볼릭 링크를 복사를 하는거면 -a 옵션을 추가해야함.
아니면 내용이 원본과 동일..

댓글 없음:

댓글 쓰기