dll,lib 질문드립니다.
글쓴이: brainz / 작성시간: 금, 2014/03/21 - 6:00오후
저는 여태까지
dll파일은 동적으로 로드하는 라이브러리 -> LoadLibrary()함수를 통해서
lib파일은 정적으로 로드하는 라이브러리 -> 링커옵션에 추가 or #pragma comment
이렇게만 알고있었는데,
A라는 라이브러리를 빌드해서 나온 추출결과가 A.lib, A.dll 두개 일경우
링커옵션으로 A.lib를 추가한다음에 A.dll 파일을 실행파일과 동일한 경로에 넣어둬야지
안넣으면 아래와 같은 에러가 발생하면서 실행이 안되네요..
그러니깐 lib파일을 정적으로 링크 시켰는데 왜 dll파일이 또 필요한지 궁금하네요 (__)
인터넷에 좀 찾아봤는데 확실한 글을 못찾아서 질문드립니다. 항상 좋은하루되세요
File attachments:
첨부 | 파일 크기 |
---|---|
없음.png | 9.17 KB |
Forums:
klib.lib가 static library가 아니라
klib.lib가 static library가 아니라 dll에 대한 import library라서 그런걸 겁니다.
?
Visual Studio 프로젝트에는 Dynamic Link Library 와
Static Link Library 이렇게 두 가지가 따로 있습니다.
Dynamic Link Library 프로젝트를 빌드해도 lib 가 나오고
이게 정적 링크가 가능한 lib 라면 굳이 따로 프로젝트를
놓았을 이유가 없겠지요?
알고 계신 것이 맞기는 한데요
DLL을 직접 링크하는 것이 약간 번거로운 면이 있어서 보통 쉽게 사용하라고 LIB파일을 같이 제공합니다. 그런데 이 LIB파일이 라이브러리 본체가 아니고 사실상 해당 DLL을 불러들이는 역할만 하는 LIB인 것입니다. (말하자면 휴대폰 충전기의 젠더같은 역할입니다.) 그러니 결국 DLL파일도 필요해지는 것이죠. 보기에는 이상해보이지만 직접 LIB없이 DLL파일을 임포트해서 사용해보시면 어느정도 이해가 되실겁니다.
물론 아예 DLL파일이 없이 돌아가도록 만들어진 LIB도 있고 이것이 원래의 용도인건 알고 계신 그대로입니다.
또는, 라이브러리 본체는 LIB에 들어있지만, 그 라이브러리가 또다시 다른 DLL파일을 참조하도록 되어 있는 경우도 있습니다. 구조상으로는 첫 번째 케이스와 같지요. 이 경우에는 대개 DLL파일 이름이 LIB와 다르지만요.
--
댓글 달기