반응형

윈도우즈 라이브러리 개념(LIB, DLL)


이글을 정리하게 된 경우 당연히 사용해야 할 상황이 닥쳤기(?) 때문에 적는다.


라이브러리 개념

 라이브러리는 일반적으로 운영체제에 많은 부분은 의지하는 경우가 있다. 따라서 리눅스와 윈도우의 라이브러리 확장자 이름이 다르다. 심지어 일부는 정의 하는 이름도 다르다.

 윈도우즈에서 개념적으로 정적 라이브러리와 동적 라이브러리로 분류가 되며, 각 확장자는 순서대로 lib, dll로 붙는다.


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

 정적 라이브러리(Static Library)의 경우 종속적인(해당 라이브러리를 사용하는) 프로그램이 컴파일(빌드와 링크 포함)되는 시점에 필요로 하고 실행에는 이미 라이브러리의 내용이 포함되어 있기 때문에 정적 라이브러리 파일이 필요로 하지 않는다. 확장자는 .lib를 사용한다.

리눅스에서는 동일한 개념으로 확장자 .o(Object의 약자)를 사용한다.


 동적 라이브러리(Dybamic Library)는 종속적인 프로그램이 컴파일시 링크만 하게 된다. 이 때문에 실행 프로그램이 실행되는 시점에 동적 라이브러리 파일이 있어야 한다. 이 때 운영체제는 실행 프로그램에서 요청하는 dll 파일을 찾게 되는데, 첫째는 실행 프로그램의 같은 폴더내에서 찾게 되고, 그 다음은 하위 폴더, 마지막으로는 환경변수를 통해서 찾게 된다. 이러한 과정으로도 필요한 dll 파일을 찾지 못하게 되면, 오류 메시지를 보여주고 프로그램 실행이 중단된다.

리눅스에서는 비슷한(사실상 같은) 역할을 하는 라이브러리를 공유 라이브러리(Shared Library)라 부르고 확장자는 .so(Shared Object의 약자)를 사용한다.


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

 vs는 실제 둘의 차이를 비교하기 위해서 많이 사용하는 검색 키워드이기도 하다. 두 방법이 각각 장단점이 있는데, 성능(흔시 실행 속도)는 정적 라이브러리가 앞서지만, 재사용성은 동적 라이브러리가 앞선다. 이는 동적 라이브러리를 많이 사용할 수록 여러 파일로 나누어져있기 때문에 발생하는 문제이기도 하다.


제작 및 사용 방법

 운영체제에 따라서 파일 확장자 부터 다르며, 제작 및 사용 방법도 컴파일의 종류에 영향을 받는다. 제작 및 사용 방법은 사용하는 컴파일러에 대해서 조사를 해야 한다. 다만, 대부분이 매크로와 컴파일러에서 제공하는 옵션 사용하기 때문에 원래 소스코드에 손을 덜 대거나 호환성이 높은 코드를 작성한다.



반응형

+ Recent posts