티스토리 뷰
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
'IT > Embedded Software' 카테고리의 다른 글
[임베디드 SW 공학] Make의 구조 (0) | 2017.09.25 |
---|---|
[임베디드 SW 공학] Make 빌드시스템의 소개 (0) | 2017.09.25 |
[임베디드 SW 공학] gcc 정적 라이브러리 (0) | 2017.09.18 |
[임베디드 SW 공학] gcc의 주요 옵션 (0) | 2017.09.18 |
[임베디드 SW 공학] 쉘(Shell) 반복문 (0) | 2017.09.09 |