Software/Embedded system

C 프로그램 빌드 과정 정리

neovaga 2021. 8. 9. 00:23

프로그램을 빌드하는데 4가지 단계

 

단계별 빌드 과정

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("Hello Main function\n");
    return 0;
}
//main.c 파일 생성

//Processing 단계 main.i 파일을 생성 (-E 옵션: 전처리 과정의 결과 화면에 보여줌)
➜  55_blog gcc -E main.c > main.i
➜  55_blog ls
main.c main.i

//compiling 단계 main.s 파일 생성 (-S 옵션: 전처리된 파일을 어셈블리 파일로 컴파일까지 수행)
➜  55_blog gcc -S main.i
➜  55_blog ls
main.c main.i main.s

//Assembly 단계 as로 .s파일을 .o 파일 생성 (-c 옵션: 어셈블까지 수행하고 링크는 수행 안함)
➜  55_blog as -c main.s -o main.o
➜  55_blog ls
main.c main.i main.o main.s

//Linking 단계 -v 옵션으로 링킹이 된다는 것만 확인함 (-v 옵션: 컴파일 수행된느 과정 출력, -o 옵션: 실행파일 생성)
➜  55_blog gcc -v main.o -o a.out
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin20.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/ld" -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -dynamic -arch x86_64 -platform_version macos 11.0.0 11.3 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o a.out -L/usr/local/lib main.o -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/12.0.5/lib/darwin/libclang_rt.osx.a

➜  55_blog ls
a.out  main.c main.i main.o main.s

//최종 실행파일
➜  55_blog ./a.out
Hello Main function
반응형

'Software > Embedded system' 카테고리의 다른 글

Sizeof()for struct and pointer with pack()  64bit system  (0) 2022.06.04
IPC Concept  (0) 2022.02.13
exec() System call concept  (0) 2021.06.27
fork() system call concept  (0) 2021.06.27
Memory - stack and heap  (0) 2021.05.26