http://kldp.org/HOWTO/html/Program-Library-HOWTO/
정적,동적,동적 적재 라이브러리의 개념...
쉽게
- 정적 라이브러리:
main이 있구 h파일과 cpp파일을 다른곳에 만들어서 즉 file1.o라구 만들어 놓은후에 정적 라이브러리(.o)를 만들
어서 같이
컴파일을 하게 되면 컴파일 하는 과정에서 하나의 파일이 생성이 되는거구...
- 동적 라이브러리: 같은 방법으로 file1.so를 만들어서
컴파일을 하더라두 이 file1.so는 컴파일 과정이 아닌 실행이 되면서 실행파일이
실행이 될때 해당 경로에서 찾는겁니다. 경로는
.bash_profile에서 지정해 준 곳의 lib를 참조 하거나 강제 링크된 곳...
- 정적 적재 라이브러리:라이브러리를 열거나,심볼을
찾거나,에러를 조정하거나,라이브러리를 닫을 때 실행 되는거...
☞ 정적 라이브러리 사용하기
# ar rcs
my_library.a file1.o file2.o ar(archiver)라는걸 사용을 해서 file1.o와 file2.o를 사용해서
my_library.a정적 라이브러리를 만
듭니다.
☞ 동적 라이브러리 사용하기
환경 변수 중에
LD_LIBRARY_PATH,LD_DEBUG 설정하는 방법을 알아야 하구...
#gcc -fPIC -g -c -Wall
file1.c
#gcc -fPIC -g -c -Wall file2.c
#gcc -shared -WI
,-soname,libmystuff.so.1 \
-o libmystuff.so.1 file1.c
file2.c
-g 컴파일시에 디버그 정보 보여주세요!!!
-c 오브젝트 파일 만들어
주세요!!!
-Wall 경고 정보를 보여 주세요!!!
-fPIC나 -fpic
-->fPIC를 사용을 하면
언제나 동작을 하구 fpic보다는 더 많은 양의 코드를 생성을 합니다.
-->fpic는 작고 빠른 코드를 만들어주지만 전역
심볼이나 코드의 코기 같은 것에서 플랫폼에 독립적입니다. 링커는 공유 라이브러리를
만들 때 이 옵션이 맞는지 말해
줄겁니다. 하지만 모르겠다 싶으면 fPIC를 사용을 하라구 하는군요.
-WI,-export-dynamic
-->동적
심볼 테이블에 모든 심볼을 추가합니다. '역 의존성'이 있을 때 이 옵션을 필요로 합니다. 즉,DL라이브러리가 라이브러리를
로드
하는데 프로그램에서 필요한 심볼이지만, 관례에 의해 정의되지 않은 심볼을 필요할 경우 사용됩니다.
-WI,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
-->라이브러리 클라이언트 프로그램을 설치할
때 이 옵션을 사용한다면, 그것이 충돌을 일으키지 않거나, 라이브러리를 숨기는 다른
기술을 사용하도록 하기 위해
LD_LIBRARY_PATH를 사용하는 것을 걱정할 필요가 없습니다.
공유 라이브러리를 어딘가에 설치를 하구 싶을 때
-->ldconfig
-n directory_with_shared_libraries 하면 됩니다. 하지만 일반적인 라이브러리는 /usr/lib에 위치합니다.
☞ 동적 적재 라이브러리
플러그인이나 모듈을 구현 할 때
적합합니다.
☞ 기타 관련 내용...
# ldd 실행 파일 실행 파일과 관련된
라이브러리 목록 나옵니다.
/lib/ld_linux.so.N(N은 1이상인데 보통 2) 다른 라이브러리를 로드하는
라이브러리
lib.so.N(N은 6이상) C라이브러리,다른 언어에서 C라이브러리를 사용하고자 하면 (적어도 그들의 라이브러리에서
구현하려할 때),
다른 대부분의 프로그램들이 이것을 포함
# nm -o 라이브러리 이름
정적,공유 라이브러리 모두
동작. 심볼의 이름,심볼의 값,심볼의 타입 나열...
심볼이 소스코드의 어디에서 정의되어 있는지도 알려 준다는데 별
필요없음...
GNU libtool을 사용을 합니다. http://www.gnu.org/software/libtool/libtool.html
매우 작은 실행 파일만들기 http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
C++ 초기화 속도 높이기 http://www.suse.de/~bastian/Export/linking.txt
최종 마무리 :http://kldp.org/HOWTO/html/Program-Library-HOWTO/more-examples.html 이 모든 내용에 대한 소스와 스크립트 내용을 확인하면 이해가 아주 빠릅니다.