컴파일 : 소스코드에서 오브젝트 코드를 만드는 것
링킹 : 목적코드에서 실행가능한 형태 혹은 라이브러리로 만드는 것
빌드 : 컴파일 + 링킹
[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 명령으로 한번에 실행파일 생성이 가능하다