[C] 정적 라이브러리, 동적 라이브러리

EunJin
3 min readMar 7, 2021

--

라이브러리(Library)

자주 사용하는 함수들을 미리 작성해 두고, 별도로 오브젝트들을 하나의 파일로 모아 저장 시켜둔 것

  • 정적 라이브러리

실행파일에 완전히 포함되어버리는 형식의 라이브러리

  • 동적(공유 라이브러리)

실행파일에 포함되지 않고, 실행될 때 해당 라이브러리를 불러오는 형식의 라이브러리

먼저, C언어로 구구단 프로그램(mul.h, mul.c, gugudan.c)을 제작

mul.h
mul.c
gugudan.c
  • 정적 라이브러리 생성 및 컴파일
# ar rc libmycalc.a sum.o sub.o mul.o div.o
  1. r는 정적 라이브러리를 만들겠다는 옵션, c는 새로 생성을 하겠다는 옵션
# gcc -o simplecalc simplecalc.c -L./ -lmycalc
  1. L./은 현재 디렉터리 위치를 라이브러리 찾기 디렉터리로 하겠다는 의미
  2. 라이브러리 이름은 lib와 .a를 제외한 이름으로 작성
  • 동적 라이브러리 생성 및 컴파일
# gcc -fPIC -c sum.c sub.c mul.c div.c
  1. -fPIC 옵션은 독립적 위치인 코드를 생성하여, 로드되는 메모리 주소가 달라도 실행하게 한다.
# gcc -shared -W1,-soname,libmycalcso.so.1 -o libmycalcso.so.1.0.1 
  1. -W1은 뒤에오는 옵션들이 gcc를 거치지 않고 바로 링커에게 전달되도록 해준다. 즉, 링커가 사용할 옵션을 입력하기 위한 옵션이다.
  2. -soname,libmycalcso.so.1 라이브러리에서 해당 so에 대한 name을 지정, 다른 응용프로그램들은 이 이름을 참조하여 라이브러리를 찾는다.
  3. -o libmycalcso.so.1.0.1 funcName.o funcName.o를 이용하여 libmycalcso.so.1.0.1라는 결과물(동적 라이브러리)을 생성
# ln -s libmycalcso.so.1.0.1 libmycalcso.so
  1. 위의 과정을 끝내고 나면, libmycalcso.so.1.0.1이라는 파일이 생성된다. 이 라이브러리는 프로그램을 컴파일할 때와 실행시킬 때 호출이 되는데, 호출될 때 libmycalcso.so를 찾기 때문에 ln 명령을 이용해서 libmycalcso.so 링크 파일을 생성
# gcc -o simplecalcso simplecalc.c -L./ -lmycalcso
  1. 링크 과정은 정적 라이브러리를 사용할 때와 동일

--

--

EunJin
EunJin

Responses (1)