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는 실제로 심볼도 만들어준다(링크)