라이브러리 - DLL 과 LIB 세미나

라이브러리란?
프로그래밍에 사용할 수 있게 미리 만들어져 있는 함수나 변수들의 묶음을 의미한다.
이러한 함수나 변수들은 미리 컴파일되어 있어서 소스파일의 컴파일 과정에서 링크만 하면 바로 사용할 수 있다.

왜 사용 하는가..?
자주 사용하는 함수들을 쉽게 사용할 수 있는것이 주목적.
미리 컴파일되어 있어서 링크만 하면 사용 가능하기 때문에 컴파일 시간을 단축시킬 수 있기 때문에.

*헤더파일은 라이브러리를 사용할 때 함수의 원형을 쉽게 추가하기 위해서 만든 것.
소스 실행을 위해 참조되는 파일. 따라서 컴파일하지 않는다.
인클루드 헤더가 많아질수록, exe본체에서 LIB쪽 호출이 잦아질수록 exe본체는 사이즈가 증가함.
때문에


라이브러리는 정적라이브러리와 공유라이브러리로 분류됨.
정적라이브러리는 컴파일 시 링크에 의해 라이브러리의 오브젝트 코드가 만들고자 하는 바이너리에 추가되는 형태로 사용.
공유라이브러리는 컴파일 시에 라이브러리 함수가 사용된 곳에 공유.(링크만 걸어둠)

정적라이브러리.
각각의 실행 파일에 같은 오브젝트 파일이 중복되어 링크가 되기 때문에
실행 파일의 크기가 커져 하드디스크의 공간을 낭비할 수 있고, 메모리의 공간도 낭비할 수 있다.

공유라이브러리.
공유라이브러리를 사용하는 프로세스들은 이미 메모리에 로드되어 있는 하나의 공유라이브러리를 공유해서 사용.
메모리를 절약하고 하드디스크 공간을 절약.


정적라이브러리는 위 설명에서와 같이 공간이 낭비가 되기때문에 공유라이브러리가 등장했다고 했다.
하지만 공유라이브러리에도 단점은 존재한다.
-실행속도의 감소가 있을 수 있다.
-컴파일할 당시에 사용한 공유 라이브러리가 없는 시스템이거나 라이브러리 메이저 버전이 틀리다면 실행되지 않을 수 있다.



dll을 로딩하는 방법은 2가지가 있는데
Implict link (암시적) 과 Explicit link (명시적) 방법이 있다.

Implict link는 자동으로 해당 라이브러리 로딩 및 DLL이 경로에 없으면 실행이 안됨.
Explicit link는 사용하고자 하는 DLL을 LoadLibrary()함수를 통해 로딩..
다시 볼것..


아래는 네이년 에서 가져온 글..
------------------------------------------------------------------------------------------------------------------------------
라이브러리 함수들은 일반인 lib에 들어있는 함수를 말하시는건가요?

Lib에 들어있는 함수들과 직접 선언한 함수들의 차이를 말씀하시는거군요.

lib는 다른말로 정적 라이브러리라고합니다.

고정되어서 움직이지(변화하지)않는다는 말인데요.

이런 라이브러리들은 미리 컴파일된 코드로서 Lib파일내에 존재하고

프로그램을 작성할때 그곳에 들어있는 함수를 호출하는 코드가있다면

컴파일할때 링킹단계에서 lib파일에서 해당함수를 복사해와서 실행파일을 만듭니다.

그러니까 프로그램을 작성할때는 "winsock.h"같은 헤더만 포함해주고
(함수의 프로토타입을 알아야하기때문입니다.)

그리고 socket()같은 함수의 호출이 있었다면

링킹단계에서 ws2_32.lib라는 파일에서 socket()에 해당하는 부분을 복사해와서

실행화일에 집어 넣습니다.

그런데 직접 작성한 함수 역시 거의 비슷합니다.

프로그램 작성시에는 프로토타입만 정의되어있어도 컴파일은 되지만

다른 곳에 구현이 되어있지 않다면 링킹에서 에러가 나죠.

그러니까 이러한 함수를 미리 작성해서 컴파일 해둔것이

lib이고 동작은 하나도 다른것이 없습니다.

그런데 DLL파일은 다릅니다.

DLL은 동적 라이브러리입니다.

DLL은 컴파일 시간이 아닌 실행시간에 링킹됩니다.

그러니까 필요할때만 부르는거죠.

로딩에 시간이 소요되지만 사용하기 전까지는 로딩되지 않으니까 메모리를 절약할수있고 동시에 여러곳에서 불러서 써도 됩니다

--------------------------------------------------------------------------------------------------------------
참고 사이트

http://holosys.tistory.com/53
http://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%EB%A7%81%ED%81%AC_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC
http://majuboki12.tistory.com/11
http://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC


덧글

댓글 입력 영역


광고

통계 위젯 (화이트)

4333
383
223076