Programming/Linux(Unix)

(7/31)Library

부풍 2009. 7. 31. 14:42

표준헤더는 usr/include에서 찾아본다.

공유라이브러리(동적 라이브러리) : 라이브러리만 업데이트하면 되므로 용이.
-프로세스의 가상메모리에 올라가고, 물리메모리에는 매핑

동적 라이브러리 업데이트시 과거와 호환안되게 만들면 문제될 소지는 있다(거의 그럴일이 없다능)

gcc -fPIC option      (라이브러리에 넣을 오브젝트 만들때)
포지션 인디펜던트 코드 (position independent code)

S(hared)O(bjected)name      soname (library name(이름표))  => ---.so  => soname을 찾아봄.

gcc -shared                              -Wl                                              , -soname, libmy.so.1  
    공유라이브러리를 만들겠다      뒤에있는옵션을 링커에게전달해줘라     명찰                         
 -o     libmy.so.1.0.1          a.o        b.o      -lc
라이브러리의파일이름                                얜 의미없음

찾을때
1) /etc/ld.so.cache
  soname: library(실제 라이브러리파일)
2) /lib, /usr/lib
  여기 라이브러리파일들 다 열어봄. 비교.
3) LD_LIBRARY_PATH
 이 환경변수의 path에서 확인.  여기까지도 못찾으면 error

/etc/ld.so.cache를 업데이트 해주는 프로그램  => ldconfig
-ldconfig는 기본적으로 /usr/lib,  /lib의 모든 동적라이브러리는 갱신됨.
- /etc/ld.so.conf        요 리스트에 들어있는얘들에 대해서는 업데이트
-ldconfig -n ~~~      ~~~도 갱신
-ldconfig는 soname이 같다면 버전 높은걸로 갱신해준다. (ex so.1.0.1    so.2.0.1   =>  so2.0.1 win)

p.598
-Wall (warning메세지 출력 안함)
-wall (warning메세지 출력함)

ldconfig는 실제로 심볼도 만들어준다(링크)