2003년 10월 10일 금요일

shared library(공유 라이브러리)

http://doc.kldp.org/HOWTO/html/Program-Library-HOWTO/index.html
http://tldp.org/HOWTO/Program-Library-HOWTO/index.html

.o   : object 파일
.a   : object 파일들을 ar 명령으로 묶은 것. (static library)
lib라이브러리명.so : shared object file

ar - create, modify, and extract from archives
     ex) ar rcv 파일.a 파일.o 파일.o .....

nm - list symbols from object files
ld - Using LD, the GNU linker
ldd - print shared library dependencies
readelf - displays information about ELF files.

library를 링크하는 순서.
--rpath, -wl (파일에 적혀있는 RPATH)
LD_LIBRARY_PATH
/etc/ld.so.cache (/etc/ld.so.conf에 적혀서 ldconfig로 설정하는 파일)
/usr/lib
/usr/local/lib

모든 파일에 link되는 library - ld-linux.so (ld : link loader)

환경변수 LD_DEBUG=help [실행파일]
LD_DEBUG=libs
LD_DEBUG=reloc
LD_DEBUG=files
LD_DEBUG=symbols
LD_DEBUG=bindings
LD_DEBUG=versions
LD_DEBUG=all
LD_DEBUG=statistics

-------------
LD_FLAGS : ld에 들어갈 옵션을 줄 때 쓴다. (configure, make 등에서)
CFLAGS : gcc, g++에 들어갈 옵션을 줄 때 쓴다. (configure, make 등에서)


--------------
.o 파일 만들기(-c 옵션을 준다.)
gcc 파일명.cpp -c
g++ 파일명.cpp -c

.a 파일 만들기
ar rs 파일명1.o 파일명2.o ......

컴파일 할 때
1) 컴파일 할 때 library를 같이 적었는 데도 컴파일이 안된다면
g++ A B 라고 하면 A가 B의 symbol를 참조할 때는 이렇게 적어주어야 한다.
따라서 program source(A)를 먼저적고 그것이 이용하는 library(B)는 나중에 적는 다.
일반적으로 library는 source보다 나중에 적어야 한다.

댓글 없음:

댓글 쓰기