컴파일 : 소스코드에서 오브젝트 코드를 만드는 것

링킹 : 목적코드에서 실행가능한 형태 혹은 라이브러리로 만드는 것


빌드 : 컴파일 + 링킹



[Linux (ubuntu) 에서 GCC 를 이용한 컴파일 및 링킹]


1) 컴파일 : gcc -c test.c

2) 링킹 : ld -o test /usr/lib/x86_64-linux-gnu/crt1.o test.o -lc /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o -dynamic-linker /lib64/ld-linux-x86-64.so.2


설명:

-lc : libc.a 를 포함 ( printf 함수와 같은 C Library 를 사용할수 있게 한다)


libc : C Library

glibc : GNU C Library


crt1.o , crti.o, crtn.o : _start, _init 함수와 main 함수로의 jump 를 해주는 라이브러리를 가지고 있다


-dynamic-linker /lib64/ld-linux-x86-64.so.2 : ELF 포맷을 실행해주는 dynamic linker 를 지정한다


[macOS (10.13) 에서 GCC 를 이용한 방법]


1) 컴파일 : gcc -c test.c

2) 링킹 : ld -o test -lSystem test.o /usr/lib/crt1.o


-lSystem : C Library import ( libSystem.dylib )

/usr/lib/crt1.o : main 으로 jump 해주는 라이브러리 포함 ( com.apple.pkg.DevSDK_macOS1013_Public )

(source code : https://opensource.apple.com/source/Csu/Csu-85/)

출처 : https://github.com/skaht/Csu-85


libSystem.dylib : C Library ( com.apple.pkg.Core 에 포함 )


확인 방법

pkgutil --file-info /usr/lib/libSystem.dylib

pkgutil --file-info /usr/lib/crt1.o



* 보통은 gcc -o test test.c 명령으로 한번에 실행파일 생성이 가능하다



+ Recent posts