본문 바로가기

6. With IT/6.2 NDK

정적라이브러리 동적라이브러리


라이브러리란 프로그래밍에 사용할 수 있게 미리 만들어져 있는 함수나 변수들의 묶음이다. 

라이브러리의 개요
  리눅스에서 프로그램을 개발하다 보면 여러 사람들이 함께 개발하는 경우가 종종 있다. 그 때 같은 기능을 여러 사람이 공동으로 사용하게 되는 경우가 있는데, 그러한 기능을 각각의 소스 프로그램에 함수로 넣어 사용하는 방법보다는 라이브러리를 만들어 함께 사용하면 여러가지 이점이 있다. 
-기본적으로 제공되는 표준 라이브러리는 /usr/lib 에 존재한다.
-C 컴파일러는 프로그램 컴파일 시 기본적으로 이 디렉터리에서 라이브러리 함수를 찾아 링크 수행.
-gcc의 -L과 -l 옵션을 이용하면 다른 디렉토리에 있는 라이브러리도 이용할 수 있음.
-라이브러리의 이름은 lib로 시작되며 라이브러리의 의미를 나타내는 이름다음에 파일 확장자 .a .so로 구성.

라이브러리의 종류
  라이브러리는에는 정적 라이브러리와 공유 라이브러리 두 종류가 있다.  정적 라이브러리는 미리 만들어 놓은 라이브러리 함수의 오브젝트 코드를 ar 도구를 이용하여 아카이브로 만들어 놓은 것이다. 컴파일 과정 중 링크 단계에서 프로그램의 오브젝트 코드와 지정한 라이브러리의 오브젝트코드를 결합하여 하나의 실행 가능한 파일을 생성 한다. 정적 라이브러리 파일은 확장자로 .a를 가지며 이 라이브러리 함수를 이용할때에는 관련된 헤더파일을 include하여 사용. 정적 라이브러리를 이용하여 실행 파일을 생성하면 실행 파일에 라이브러리 함수의 코드가 포함된다. 따라서 이 라이브러리르 함수를 여러 프로그램에서 사용하면 각각의 실행 파일에 라이브러리 함수의 코드가 포함된다. 따라서 이 라이브러리 함수를 여러 프로그램에서 사용하면 각각의 실행파일에 라이브러리 함수의 코드가 포함되고 동일한 함수의 코드가 메모리 여러 군대에 존재하게 된다. 이는 메모리나 하드디스크 공간이 그 만큼 낭비된다는 의미이다. 이와 같은 정적 라이브러리 함수의 단점을 극복한 것이 공유 라이브러리이다. (쩌는군 공유라이브러리씨.)
프로그램이 공유 라이브러리를 사용하면 실행 파일에 라이브러리 함수 코드가 포함되는 것이 아니라 실행 시 사용가능한 공유 코드를 참조하는 방식으로 링크된다. 따라서 이 공유 라이브러리 함수를 이용하는 프로그램이 여러 개 일지라도 하나의 라이브러리를 함께 이용하므로, 메모리나 하드 디스크를 효과적으로 사용할 수 있다. 리눅스에서 공유 라이브러리를 로드하고 참조 함수를 확인하는 프로그램을 동적로더(ld.so)라고 한다. 이 로더는 /etc/ld.so.conf에 설정된 경로를 이용하여 공유 라이브러리를 검색한다.

'6. With IT > 6.2 NDK' 카테고리의 다른 글

NDK_컴파일과정과 링크  (0) 2012.06.19
(.data+0x0) multiple definition of 변수 에러  (0) 2012.06.18
c에서 java호출(Native to Java)  (2) 2012.03.26
NDK-static library빌드 관련...  (0) 2012.03.06
Native to Android  (0) 2012.02.18