Libft_Library (feat.compile)

tar Rocks·2022년 7월 5일
0

42

목록 보기
3/12

정적라이브러리 제작 (명령어ver)

순서

  1. 오브젝트 작성
    gcc -c *.c

  2. ar 명령 이용해서 라이브러리 아카이브 만들기

    • flags
      -r : 라이브러리 아카이브에 새로운 오브젝트를 추가할것
      -c : 아카이브가 존재하지 않을경우 생성하라는 옵션
      ar rc libft.a *.o
  3. 컴파일

compile

  1. 정의
  • 인간이 이해할 수 있는 언어(고수준 언어 : C, C++, Java)로 작성된 소스코드를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역하는 작업
  • 소스코드 -----> 실행파일(실행시 운영체제의 Loader를 통해 메모리에 적재 후 프로그램 동작)
  1. 컴파일 과정
    • 전처리 - 컴파일 - 어셈블리 - 링킹
    1. 전처리
    • 전처리기를 통해 소스코드파일(.c)를 전처리된 소스코드 파일(.i)로 변환하는 과정
    • 주석제거, 헤더파일 삽입(소스 코드 파일 내에 복사 - 링킹과정을 통해 오브젝트파일과 결합), 매크로 치환 및 적용(#define 지시문의 내용으로 치환)
    1. 컴파일
      • 컴파일러를 통해 전처리된 소스 코드 파일(.i)을 어셈블리어 파일(.s)로 변환하는 과정
      • 언어의 문법 검사 및 static영역에 대한 메모리 할당 수행
      • 컴파일러
      • (프론트엔드 - 미들엔드 - 백엔드)
        1. 프론트엔드 : 언어 종속적인 부분 처리
        소스코드의 어휘/구문/의미분석, 미들엔드에 넘겨주기 위한 GIMPLE트리(소스코드를 트리 형태로 표현한 자료 구조) 생성
        2. 미들엔드 : 아키텍쳐 비종속적인 최적화 수행
        CPU 아키텍쳐에 관계 없이 할 수 있는 최적화
        프론트엔드에서 넘겨받은 GIMPLE 트리를 이용해 최적화 후 백엔드에서 사용하는 RTL(Register Transfer Language: 고급어와 어셈블리어의 중간 형태)
        3. 백엔드 : 아키텍쳐 종속적인 최적화
        아키텍쳐 특성에 따라 최적화 수행
        RTL을 이용해 최적화를 수행하고 어셈블리코드 생성
        4. 어셈블리어 : CPU마다 고유하게 가지고 있는 이진수로 이루어진 명령어
        사람이 이해할 수 있게 부호화한 것이 어셈블리어
        어셈블리어는 기계어와 1:1 매칭

gcc의 경우 프론트/미들/백 단계가 서로 의존성을 가짐. clang(프론트엔드)+LLVM(미들엔드,백엔드)는 단계가 잘 분리되어 있음.

  1. 어셈블리
    어셈블러를 통해 어셈블리어 파일(.s)을 오브젝트파일(.o)로 변환하는 과정.+ object file
    1. 정의 : 오브젝트코드로 구성된 파일
    2. 포맷 : 오브젝트파일헤더, 텍스트섹션, 데이터섹션, 심볼테이블섹션, 재배치정보섹션, 디버깅정보섹션
    3. 심볼 : 함수나 변수를 식별할 때 사용하는 이름

    함수를 구현한 오브젝트 파일을 실행하기 위해서는 함수를 사용하는 오브젝트 파일과 함수를 구현한 오브젝트 파일을 연결시키는 작업이 필요 == 링킹과정

  2. 링킹
    링커를 통해 오브젝트 파일을 묶어 실행파일로 만드는 과정

profile
코딱이

0개의 댓글