오브젝트 파일

정적 라이브러리

# 컴파일하여 오브젝트 파일 생성
$ cc -c -o foo.o foo.c
$ cc -c -o bar.o bar.c
  
# 하나의 정적 라이브러리로 아카이빙
$ ar ruv libfoo.a foo.o bar.o
  
# 아카이빙 파일 확인
$ ar tv libfoo.a
  
# baz.o 내에 정의되어있지 않은 심볼이 libfoo.a에 정의되어 있다면 오브젝트를 포함하여 링크
$ cc -o baz baz.o -lfoo

공유 라이브러리

# 위치 독립코드 옵션을 사용하여(-fPIC) 오브젝트 파일 생성
$ cc -fPIC -c -o foo.o foo.c
$ cc -fPIC -c -o bar.o bar.c
  
# 공유 오브젝트 생성 옵션(-shared)과 링커에게(-Wl) libfoo.so.0 이라는 SONAME(-soname) 파라미터를 전달
$ cc -shared -Wl,-soname,libfoo.so.0 -o libfoo.so foo.o bar.o
 
# baz.o 내에 정의되어있지 않은 심볼이 libfoo.a에 정의되어 있다면 오브젝트를 포함하여 링크 (정적라이브러리와 같은 방법으로 링킹)
$ cc -o baz baz.o -lfoo

공유 라이브러리 실제 내부 처리