답변:
정적 라이브러리 (LIB)와 동적 라이브러리 (DLL)가 있지만 .LIB 파일은 정적 라이브러리 (오브젝트 파일 포함) 또는 가져 오기 라이브러리 (링커가 DLL에 링크 할 수 있도록 기호 포함) 일 수 있습니다.
많은 프로그램에서 사용하려는 코드가있을 수 있으므로 라이브러리가 사용됩니다. 예를 들어 문자열의 문자 수를 계산하는 함수를 작성하면 해당 함수는 많은 프로그램에서 유용합니다. 함수가 올바르게 작동하면 코드를 사용할 때마다 코드를 다시 컴파일 할 필요가 없으므로 해당 함수의 실행 코드를 라이브러리에 넣고 링커에서 컴파일 된 코드를 추출하여 프로그램에 삽입 할 수 있습니다. . 이러한 이유로 정적 라이브러리를 '아카이브'라고도합니다.
동적 라이브러리는이 단계를 한 단계 더 발전시킵니다. 각 프로그램에서 공간을 차지하는 라이브러리 함수의 여러 사본을 갖는 것은 낭비 적입니다. 왜 모두 함수의 사본 하나를 공유 할 수 없습니까? 이것이 바로 동적 라이브러리입니다. 라이브러리 코드를 컴파일 할 때 프로그램에 빌드하는 대신 메모리에로드 될 때 프로그램에 맵핑하여 실행할 수 있습니다. 동일한 기능을 사용하는 동시에 실행되는 여러 프로그램은 모두 하나의 사본을 공유하여 메모리를 절약 할 수 있습니다. 실제로 코드를 통과하는 경로에 따라 필요한 경우에만 동적 라이브러리를로드 할 수 있습니다. 인쇄를하지 않는 경우 프린터 루틴이 메모리를 차지하지 않도록주의하십시오. 반면에 이것은 프로그램이 실행되는 모든 머신에 동적 라이브러리의 사본이 설치되어 있어야 함을 의미합니다.
예를 들어, 'C'로 작성된 거의 모든 프로그램에는 'C 런타임 라이브러리'라는 라이브러리의 함수가 필요하지만 모든 함수가 필요한 프로그램은 거의 없습니다. C 런타임은 정적 및 동적 버전으로 제공되므로 특정 요구에 따라 프로그램이 사용하는 버전을 결정할 수 있습니다.
.LIB
파일은 정적 (오브젝트 파일을 포함) 라이브러리 또는 수입 라이브러리 (DLL을 링크로 링커를 허용하는 문자 포함)이 될 수 있습니다. 왜 그런지 궁금합니다.
.lib
; 이것은 .lib
단순히 대상 DLL의 설명자이며 주소, 진입 점 등을 포함하지만 코드는 없습니다. 이것은 .lib
링커에 전달해야합니다. 두 번째 는 DLL을 함수 와 함께 수동으로로드하여 DLL을 사용할 때 명시 적 연결LoadLibrary
입니다. 이 형식에서는 해당 .lib
파일이 필요하지 않지만 DLL 내보내기와 해당 주소를 찾고 포인터를 통해 이러한 함수를 호출하기 위해 약간의 노력을 기울여야합니다.
또 다른 측면은 보안 (난독 화)입니다. 기본 응용 프로그램에서 코드 조각을 추출하여 "분리 된"동적 링크 라이브러리에 넣으면 코드가 분리되어 있으므로 공격, 분석 (역 엔지니어링)하기가 더 쉽습니다. 동일한 코드 조각이 LIB 라이브러리에 보관되면 컴파일 된 (연결된) 대상 응용 프로그램의 일부이므로 해당 코드 조각을 나머지 대상 바이너리에서 분리 (분화)하기가 더 어려워집니다.
DLL은 다른 실행 프로그램과 공유되는 기능 라이브러리입니다. windows / system32 디렉토리를 보면 수십 개의 디렉토리를 찾을 수 있습니다. 프로그램이 DLL을 만들 때 응용 프로그램 * .exe 프로그램이 DLL에 선언 된 기호를 확인할 수 있도록 일반적으로 lib 파일도 만듭니다.
.lib는 프로그램에 정적으로 링크 된 함수 라이브러리이며 다른 프로그램과 공유하지 않습니다. * .lib 파일과 연결되는 각 프로그램에는 해당 파일의 모든 코드가 있습니다. C.lib와 연결되는 두 개의 프로그램 A.exe 및 B.exe가있는 경우 각 A와 B에는 모두 C.lib의 코드가 포함됩니다.
DLL과 lib를 만드는 방법은 사용하는 컴파일러에 따라 다릅니다. 각 컴파일러는 다르게 수행합니다.
또 다른 차이점은 성능에 있습니다.
DLL이 런타임에 .exe에 의해로드되면 .exe 및 DLL은 공유 메모리 개념으로 작동하므로 정적 링크에 비해 성능이 상대적으로 낮습니다.
반면에 .lib는 컴파일 타임에 요청하는 모든 프로세스에 정적으로 링크되는 코드입니다. 따라서 .exe는 단일 메모리를 가지므로 프로세스 성능이 향상됩니다.