본문 바로가기

IT/Basic

동적, 정적 라이브러리 개념설명과 gcc에서 사용하기

 

  • 유연성 부족 문제에 의해서 정적라이브러리를 지양(피하는)한다.
  • 유연성을 올리기 위해서 동적 라이브러리를 이용한다

동적링크라이브러리(Dynamic Link Library) - .dll

동적라이브러리는 실행시간에 실행 프로세스 주소 공간으로 로드됩니다.

 정적라이브러리처럼 컴파일 시에 함수가 연결되는 방식이 아닌 런타임시에 함수가 실행파일에 연결된다. 실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행 파일의 크기가 작아진다. 하지만 실행 파일은 함수에 대한 정보만 가지고 있을 뿐 실제 코드를 가지고 있지 않기 때문에 프로그램 실행시에는 dll 파일이 항상 존재해야 한다.

 

실행 시간에 라이브러리 파일을 찾아 코드를 포함하기 때문에 동적라이브러리라고 부른다
즉 정적 라이브러리는 컴파일 시간에 코드를 결정하기 때문에 소스가 변경되면 새로 컴파일해야하지만

동적 라이브러리의 경우 라이브러리만 교체하는 것으로도 변경이 가능하다

-fPIC 옵션은 Position Independent Code 의 약자이며 test.o 파일을 동적라이브러리로 사용하도록 컴파일 하는 옵션이다.
이렇게 컴파일된 오브젝트 파일을 .so 파일로 묶으면 된다

컴파일은 아래와 같이 하면 된다

만일 libtest.a 파일과 libtest.so 파일이 같이 있을 경우 gcc컴파일러는 libtest.so 파일을 먼저 지정하게 된다.

만일 libtest.a 를 사용하여 컴파일 하고 싶으면 아래와 같이 실행하면 된다


정적링크라이브러리(Static Link Library) - .lib

정적 라이브러리는 링크 시간에 실행파일에 포함됩니다. 

 

 컴파일 시에 함수가 실행파일에 연결된다. 실행 파일에 함수의 코드가 복사되기 때문에 실행파일의 크기가 커지는 단점이 있지만 실행 파일은 완전한 단독 실행 파일이 된다. 실행파일에 함수의 코드가 포함되어 있기 때문에 컴파일이 끝나면 lib 파일이 없어도 프로그램을 실행 할 수있다.

 

  • 정적라이브러리(또는 Archive)파일이라 불리우고 .a의 확장자를 가진다. 
  • 여러개의 오브젝트 파일들을 하나로 묶어 사용하기 때문에 Archive파일이라고 부름 
  • 컴파일 시간에 코드를 포함하여 결정하기 때문에 정적 라이브러리라고 부른다.

  • test.o 파일과 app.o 파일이 생성됨. 
  •  test.o 파일을 Archive로 묶어 보자. 

 

라이브러리 파일의 작명법은 lib 뒤에 이름을 붙임

  • libtest.a 파일이 생성됨. 
  • 이 라이브러리를 사용하여 컴파일 할려면 아래와 같이 한다. 
  • -ltest가 libtest.a를 지정하게 된다.


L 은 현재 폴더 가리 킴
( 현재 위 치에 있 는 libtest.a 파일을 이용하여 컴파일)

 

 

 

 

c 라이브러리 파일, gcc 컴파일 - nicewoong

아래와 같이 ar옵션 그리고 생성하고자 하는 라이브러리의 이름, 마지막으로 오브젝트 파일들의 이름을 나열한후 실행 한다. (※ 윈도우에서 라이브러리 파일의 확장자는 .lib이지만 리눅스에서

nicewoong.github.io

 

 

 

 

 

'IT > Basic' 카테고리의 다른 글

swp(스왑파일) 생성 오류  (0) 2020.09.04
삼항연산자  (0) 2020.08.31
SIMD, SISD  (0) 2020.08.27
[Basic] cpu, core, processor 0  (0) 2020.08.27
그래픽 카드  (0) 2020.08.27