GNU

    GNU 오픈 개발도구 활용 기법

    C 실행파일의 빌드 절차

    출처: https://naeuncoding.tistory.com/entry/C%EC%96%B8%EC%96%B4-%EB%B9%8C%EB%93%9C%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B3%BC%EC%A0%95%EC%9D%B8-%EC%A0%84%EC%B2%98%EB%A6%AC-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EC%96%B4%EC%85%88%EB%B8%94-%EB%A7%81%ED%81%AC

     

    * 빌드 에러가 발생하면 아래 과정들을 하나씩 확인해서 어떤 문제인지 확인하는데 사용할 수도 있다!!

    • cpp (c preprocessing, c 전처리)
      • #include 등 실제 c 문법이 아닌 부분을 바꿔줌
      • 결과물: .i (전처)
      • 중간확인 방법
        • gcc -E <name>: 전처리까지만 진행하고 결과 출력
        • gcc -E <name> > <output.i>: 전처리까지만 진행하고 <output.i> 에 저장

    • cc1 (c compiler)
      • C 코드를 assembly 코드로 바꿔줌
      • 결과물: .s 
      • 중간확인 방법
        • gcc -S <name>: 컴파일까지만 진행하고 .s 파일 생성 (전처리는 진행하나 결과는 저장하지 않음)

    • as (assemble)
      • binary를 object 파일을 만듦 (아직 실행할 수는 없음)
      • Assembly language를 Machine language 로 바꿔줌
      • 중간확인 방법
        • gcc -c <name>: 어셈블까지만 진행하고 .o 파일 생성 (이전 과정은 진행하지만 결과는 저장하지 않음)

    • ld (linking) 
      • object 파일을 실행파일로 만듦
      • 라이브러리를 합하고 메모리를 매핑해주는 것


    다른 gcc 옵션

    • -v: 내부적인 과정을 출력
    • -D: define 해줌
      • -DNO: NO 정의
      • -DDEBUG: printf 문 정의로 이해

    • -Wall: 컴파일 중간의 Wanning 을 모두(all) 출력

    • -l: 링커가 지정된 외부 라이브러리에서 링크하도록 지시
      • gcc <name.c> -lpthread: 'pthread' 라이브러리를 포함해서 컴파일
        (gcc 컴파일 스크립트에 디폴트로 pthread 라이브러리가 포함되지 않으면 에러 발생!)
    • -O# (optimization)
      • 중요함!! 
      • # 에 따라 optimaze 해서 빌드 진행
      • 결과물의 메모리, 속도 차이가 생김

    Tips

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

    Make 빌드 시스템 2  (0) 2022.09.02
    Make 빌드 시스템 1  (0) 2022.09.02
    라이브러리의 동작과 제작  (0) 2022.09.02
    쉘 & 쉘스크립트  (0) 2022.09.01
    리눅스 아키텍처와 명령어 (Ft. file system)  (0) 2022.09.01

    댓글

    Designed by JB FACTORY