티스토리 뷰

Shared Libraries : linked to any program at run-time

동적라이브러리는 해당 라이브러리를 가지고 있지 않고 포인터 개념으로 라이브러리의 위치만을 가리켜 다른 파일들도 하나의 라이브러리를 공유해서 사용토록 할수있는 장점을 가지고 있다.

 

Building a 'Shared Library'

- Functions must be 'reentrant' (함수들이 반드시 전역변수를 갖고있어선 아니한다.)

- This implies : No global variables

(두 실행파일의 변수가 원치 않는 공유가 이루어 질수 있다.) 

- Code must be ' position - independent'

- can't jump or call to fixed addresses

- can't access data at fixed locations

(특정 주소에 실행파일이 있다고 가정하고 소스를 짜서는 아니한다.)

 

Shared library names

 

libmyfuncs.so.1.0 : The actual shared library ( 1 은 major 0한 버전 정보, minor한 버전 정보)

libmyfuncs.so.1 : the name included in the soname filed of the library.

Used by the executable at run-time to find the latest revision of the v.1 my funcs library.

libmyfuncs.so   : Used by gcc to resolve sympol names in the library at link time when the                 executable is created.

 

Command - formats

For building the shared library :

$ gcc -fPIC -c func1.c

$ gcc -fPIC -c func2.c (-fPIC Position Independent Code 명시 -> 공유라이브러리를 만들때 반드시 사용)

 

$ gcc -fPIC -shared -Wl, -soname = libmyfuncs.so.1 *.o -o libmyfuncs.so.1.0 -lc

(-Wl은 그뒤에 ld에 전해준다.) or

$ ld -shared -soname=libmyfuncs.so.1 *.o -o libmyfuncs.so.1.o -lc

 

$ ln -s libmyfuncs.so.1.0 libmyfuncs.so

$ ln -s libmyfuncs.so.1.0 libmyfuncs.so.1

 

For linking application with shared library:

$ gcc -o foo foo.c -L/mypath/lib -lmyfuncs

 

Finding shared libraries at runtime

- Directories listed in /etc/ld.so.conf

Should generate cach using ldconfig

- Directories specified in LD_LIBRARY_PATH

Ex : export LD_LIBRARY_PATH = $HOME/foo/lib

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31