라이브러리의 동작과 제작

    Linking

    링킹의 역할

    • Library 연결 (포함X)
    • Address mapping (Embedded 에서는 mapping 까지 고려해야 함)

    링킹의 종류

    • Static Linking
      • 리눅스는 Static Library 를 사용 (lib.a)
      • Linker 가 library 를 통채로 넣는 것 (Embedded or RTOS 등에서 사용)
    • Dynamic Linking
      • 리눅스는 Shared Library 를 사용 (lib.so / shared object)
      • dynamic linking 목적
        • 메모리 낭비를 방지 
        • 실행 파일을 만들 때, 링크할 라이브러리 중 일부만 사용한다면 모두 포함해서 컴파일하는 것은 낭비
        • 컴파일할 때는 전체를 넣는 것이 아닌 Linking 할 Library 의 정보만 추가해준다 (directory 등)
        • 실행할 때는 Library 의 정보를 참조해서 RAM 에 올려준다
          이 때, 다른 프로그램에서도 같은 library 를 참조하면 RAM 에 추가할 필요 없이 공유할 수 있도록 해줌 (Kernal)




    Library

    * 리눅스에서는 library 의 확장자를 중요하게 보는 편 (.a / .so)

    Static Library 제작 및 동작

     이 후 라이브러리의 표준 directory 에 옮기지 않으면 아래와 같은 오류가 발생한다

    이 때는 /usr/lib 로 옮겨주고, permission을 수정해주면 된다.

    이 후 빌드를 하면 정상 동작!!

    단, 이 중 하나라도 dynamic library 가 있으면 아래처럼 dynamic 이 검색됨

    static 이므로 빌드 후에 표준 directory 에 복사한 library를 지워도 프로그램은 정상 실행된다!!

     

    Shared Library의 제작 및 동작

    제작

    공유 라이브러리를 사용한 응용 프로그램 실행파일 만들기

     

    공유 라이브러리를 사용한 응용 프로그램 실행파일 만들기

    LD_LIBRARY_PATH 를 설정하지 않으면 아래처럼 경로가 비어있으므로 ./a.out 이 실행되지 않음

    아래 처럼 정의를 해줘야 정상 실행이 가능하다


    <???>

    Runtime library

     

     

    '개발자라면? > Linux' 카테고리의 다른 글

    Make 빌드 시스템 2  (0) 2022.09.02
    Make 빌드 시스템 1  (0) 2022.09.02
    GNU  (0) 2022.09.02
    쉘 & 쉘스크립트  (0) 2022.09.01
    리눅스 아키텍처와 명령어 (Ft. file system)  (0) 2022.09.01

    댓글

    Designed by JB FACTORY