Embedded Linux

Makefile 작성하기

작성자 임베디드코리아 작성일24-11-29 22:13 조회687회 댓글0건
(1) 라이브러리(Library)
◆ 다른 프로그램들과 링크되기 위해 존재하는 하나 이상의 서브루틴이나 함수들의 집합 파일을 의미한다.
◆ 링크가 될 수 있도록 컴파일된 형태인 오브젝트 파일(*.o) 형태로 존재한다. 미리 컴파일 되어있기 때문에 전체 컴파일 시간이 단축된다.
◆ 라이브러리를 언제 포함시키는 지에 따라 동적 라이브러리와 정적 라이브러리로 구분할 수 있다.

■ 라이브러리 구분
    ▶ 동적 라이브러리 : 완성된 프로그램을 실행할 때 포함시키는 동적 라이브러리
    ▶ 정적 라이브러리 : 프로그램을 컴파일 하는 과정에서 포함시키는 오브젝트 파일들의 모임

■ 확장자별 라이브러리 구분
      확장자명        운영체제        라이브러리 구분
          .a                리눅스              정적
          .so              리눅스              동적
          .lib              윈도우              정적
          .dll              윈도우              동적

■ 동적 라이브러리(Dynamic Library)
    - 프로그램 실행 시 필요할 때만 라이브러리에서 함수를 참조할 수 있는 라이브러리이다.
    - 프로그램이 시작할 때 같이 로딩되고, 프로그램이 종료될 때 메모리에서 해제되는 암시적 링킹(Implicit LInking)을 사용한다.

■ 정적 라이브러리(Static Library)
    - 프로그램 빌드 시, 라이브러리가 제공하는 코드를 실행 파일에 넣는 방식의 라이브러리이다.
    - 컴파일 링킹 단계에서 실행 파일에 결합된다.
    - 정적 라이브러리를 사용하여 컴파일하면 링커가 프로그램이 필요로 하는 부분을 라이브러리에서 찾아 실행 파일에 바로 복사한다.
    - 유닉스 계열 운영체제에서는 아카이버(ar) 유틸리티를 사용해서 오브젝트 파일의 집합인 아카이브(라이브러리)를 생성할 수 있다.

    예)
        # 1. 오브젝트 파일 생성
        gcc -c foo.c bar.c

        # 2. 오브젝트 파일로 정적 라이브러리 파일 생성 [ *.o -> *.a ]
        ar rcs lib.a foo.o bar.o

      < 정적 라이브러리 문법 >
      ar [options] [라이브러리 이름] [오브젝트 파일들]

      [ 옵션 ]
- r : 새로운 오브젝트 파일이면 아카이브에 추가하고, 기존 파일이면 치환한다.
- c : 라이브러리 파일이 존재하지 않아도 안내 메시지를 출력하지 않는다.
(ar: creating archive lib.a)
- s : 아카이브 인덱스를 생성해서 링크 속도를 빠르게 한다.