[Software]/Programming Tips2008. 8. 21. 15:18
여기를 참고하자!!
http://kldp.org/HOWTO/html/Program-Library-HOWTO/


so파일 만들기, 정적,동적,동적 적재 라이브러리의 개념, C++ 초기화 속도 높이기

정적,동적,동적 적재 라이브러리의 개념...
쉽게
- 정적 라이브러리: 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 이 모든 내용에 대한 소스와 스크립트 내용을 확인하면 이해가 아주 빠릅니다.



Posted by 바트정