DLL 파일이란 정확히 무엇이며 어떻게 작동합니까?
DLL 파일은 정확히 어떻게 작동합니까?엄청나게 많은 것 같은데, 그게 뭔지, 어떻게 작동하는지 모르겠어요.
그래서, 저들은 왜 저래?
DLL이란?
DLL(Dynamic Link Libraries)은 EXE와 비슷하지만 직접 실행하지는 않습니다.Linux/Unix의 .so 파일과 유사합니다.즉, DLL은 MS의 공유 라이브러리 구현입니다.
DLL은 EXE와 매우 비슷하기 때문에 파일 형식 자체는 동일합니다.EXE 및 DLL은 모두 Portable Executable(PE; 휴대용 실행 파일) 형식을 기반으로 합니다.DLL에는 COM 컴포넌트와 를 포함할 수도 있습니다.NET 라이브러리
DLL에는 무엇이 포함되어 있습니까?
DLL에는 EXE 또는 다른 DLL에서 사용하는 함수, 클래스, 변수, UI 및 리소스(예: 아이콘, 이미지, 파일 등)가 포함됩니다.
라이브러리 유형:
거의 모든 운영 체제에는 두 가지 유형의 라이브러리가 있습니다.정적 라이브러리 및 동적 라이브러리.Windows 의 파일 확장자는 다음과 같습니다.정적 라이브러리(.lib) 및 동적 라이브러리(.dll).주요 차이점은 정적 라이브러리는 컴파일 시 실행 파일에 링크되지만 동적 링크 라이브러리는 런타임까지 링크되지 않는다는 것입니다.
스태틱 라이브러리 및 다이내믹 라이브러리에 대한 자세한 내용
정적 라이브러리는 모듈(EXE 또는 DLL)에 직접 내장되어 있기 때문에 일반적으로 컴퓨터에 정적 라이브러리가 표시되지 않습니다.동적 라이브러리는 독립 실행형 파일입니다.
DLL은 언제든지 변경할 수 있으며 EXE가 DLL을 명시적으로 로드했을 때만 로드됩니다.정적 라이브러리는 EXE 내에서 컴파일된 후에는 변경할 수 없습니다.DLL은 EXE 자체를 업데이트하지 않고 개별적으로 업데이트할 수 있습니다.
DLL 로드:
프로그램은 시작 시, Win32 API LoadLibrary를 통해 또는 다른 DLL의 종속성을 통해 DLL을 로드합니다.프로그램은 GetProcAddress를 사용하여 함수를 로드하거나 LoadResource를 사용하여 리소스를 로드합니다.
추가 정보:
자세한 내용은 MSDN 또는 Wikipedia를 참조하십시오.또한 이 답변의 출처.
DLL이란?
DLL 파일은 실행 가능한 코드와 이미지 등의 리소스를 포함할 수 있는 이진 파일입니다.응용 프로그램과는 달리 이러한 기능은 직접 실행할 수 없지만 필요할 때(또는 시작 시) 로딩됩니다.
그들은 중요합니까?
대부분의 응용 프로그램은 시작 시 필요한 DLL 파일을 로드합니다.이 중 하나가 발견되지 않으면 시스템은 프로세스를 전혀 시작할 수 없습니다.
DLL 파일에는 다른 DLL 파일이 필요할 수 있습니다.
응용 프로그램에 DLL 파일이 필요한 것과 마찬가지로 DLL 파일은 다른 DLL 파일 자체에 종속될 수 있습니다.종속성 체인의 이러한 DLL 파일 중 하나를 찾을 수 없으면 응용 프로그램이 로드되지 않습니다.이것은 Dependency Walker와 같은 Dependency Walker 도구를 사용하여 쉽게 디버깅할 수 있습니다.
시스템 폴더에 너무 많은 파일이 있습니다.
대부분의 시스템 기능은 코드/리소스를 공유하는 표준 형식이기 때문에 DLL 파일 형식으로 사용자 프로그램에 노출됩니다.각 기능은 필요한 DLL 파일만 로드되므로 시스템의 메모리 제약이 줄어듭니다.
설치된 응용 프로그램에서도 DLL 파일 사용
DLL 파일은 위에서 설명한 바와 같이 기능을 물리적으로 분리하는 형식이 되기도 합니다.정상적인 애플리케이션도 DLL 파일이 절대적으로 필요할 때까지 로드하지 않기 때문에 메모리 요건이 줄어듭니다.이로 인해 어플리케이션에는 다수의 DLL 파일이 포함되어 출하됩니다.
DLL 헬
단, 공유 DLL 파일과 공유 DLL 파일이 필요한 프로그램 간에 버전이 일치하지 않으면 시스템 업그레이드로 인해 다른 프로그램이 중단되는 경우가 있습니다.시스템 체크포인트 및 DLL 캐시 등은 이 문제를 해결하기 위한 M$의 이니셔티브입니다..NET 플랫폼에서는 이 문제가 전혀 발생하지 않을 수 있습니다.
DLL 파일 내부를 어떻게 알 수 있습니까?
DUMPBIN 또는 Dependency Walker와 같은 외부 도구를 사용해야 합니다.이 도구는 DLL 파일 내에 어떤 공개적으로 표시되는 함수(내보내기라고 함)와 DLL 파일에 필요한 다른 DLL 파일 및 이 DLL 파일이 종속된 DLL 파일로부터의 내보내기를 보여 줍니다.
어떻게 작성/사용합니까?
벤더의 프로그래밍 매뉴얼을 참조해 주세요.C++ 에 대해서는, MSDN 의 「LoadLibrary」를 참조해 주세요.
라이브러리에 있는 일부 기능을 사용하는 실행 파일을 만든다고 가정해 보겠습니다.
사용하고 있는 라이브러리가 정적인 경우 링커는 이러한 함수의 오브젝트 코드를 라이브러리에서 직접 복사하여 실행 파일에 삽입합니다.
이제 이 실행 파일이 실행되면 필요한 모든 것이 제공되므로 실행 가능한 로더가 메모리에 로드하여 실행하기만 하면 됩니다.
라이브러리가 다이내믹한 경우 링커는 오브젝트 코드를 삽입하지 않고 기본적으로 이 함수가 이 DLL에 있는 것을 나타내는 스텁을 삽입합니다.
이 실행파일이 실행되면 실행파일의 비트(스텁)가 없어지기 때문에 로더는 실행파일을 통해 누락된 스텁을 복구합니다.모든 스텁이 해결된 후에만 실행 파일의 실행이 허용됩니다.
이를 확인하려면 DLL을 삭제하거나 이름을 변경하고 실행 파일을 실행하려고 할 때 로더가 DLL 누락 오류를 어떻게 보고하는지 확인합니다.
따라서 Dynamic Link Library라는 이름은 실행 가능한 로더에 의해 실행 시 링크 프로세스의 일부가 동적으로 수행됩니다.
마지막으로 DLL에 링크하지 않으면 링커에 의해 스텁이 삽입되지 않지만 Windows에서는 실행 파일이 시작된 지 한참 후에야 실행 DLL 함수 엔트리 포인트를 로드할 수 있는 GetProcAddress API를 제공합니다.
DLL(Dynamic Link Library)과 SL(공유 라이브러리, UNIX에 준거)은 로드 시 실행 파일에 동적으로 링크할 수 있는 실행 가능한 코드의 라이브러리입니다.
정적 라이브러리는 컴파일 시 실행 파일에 삽입되어 그 시점부터 고정됩니다.이러한 파일은 실행 파일의 크기를 늘리기 때문에 공유할 수 없습니다.
동적 라이브러리에는 다음과 같은 이점이 있습니다.
1/ 컴파일 시간이 아닌 실행 시간에 로드되므로 실행 파일과는 독립적으로 업데이트할 수 있습니다(Windows에서 볼 수 있는 모든 고급 창과 대화 상자는 DLL에서 생성되므로 응용 프로그램의 모양과 느낌을 다시 작성할 필요 없이 변경할 수 있습니다.
2/ DLL은 독립적이기 때문에 여러 실행 파일 간에 코드를 공유할 수 있습니다.이것에 의해, 1개의 DLL로 100개의 애플리케이션을 실행하고 있는 경우, 메모리내에 DLL의 카피가 1개 밖에 없는 경우가 있기 때문에, 메모리가 절약됩니다.
이들의 주요 단점은 장점 #1입니다.DLL을 어플리케이션과 독립적으로 변경하면 어플리케이션이 동작을 정지하거나 이상한 동작을 시작할 수 있습니다.DLL 버전 관리는 Windows에서 잘 관리되지 않는 경향이 있기 때문에 "DLL Hell"이라는 기묘한 이름이 붙게 됩니다.
DLL 파일에는 호출 프로그램에서 검색할 수 있는 기호 목록인 내보내기 테이블이 포함되어 있습니다.기호는 일반적으로 C 호출 규칙(_stcall)을 사용하는 함수입니다.내보내기 테이블에는 함수의 주소도 포함됩니다.
이 정보를 사용하여 호출 프로그램은 컴파일 시 DLL에 액세스 할 수 없었던 경우에도 DLL 내의 함수를 호출할 수 있습니다.
Dynamic Link Libraries 소개에 대한 자세한 내용은 다음과 같습니다.
http://support.microsoft.com/kb/815065
DLL은 동시에 둘 이상의 프로그램에서 사용할 수 있는 코드와 데이터가 들어 있는 라이브러리입니다.예를 들어 윈도우즈 운영 체제에서는 Comdlg32 DLL이 일반적인 대화 상자 관련 기능을 수행합니다.따라서 각 프로그램은 이 DLL에 포함된 기능을 사용하여 열기 대화 상자를 구현할 수 있습니다.이를 통해 코드 재사용과 효율적인 메모리 사용을 촉진할 수 있습니다.
DLL을 사용함으로써 프로그램을 별도의 컴포넌트로 모듈화할 수 있습니다.예를 들어 회계 프로그램은 모듈별로 판매할 수 있습니다.모듈이 설치되어 있으면 실행 시 각 모듈을 메인 프로그램에 로드할 수 있습니다.모듈이 분리되어 있기 때문에 프로그램 로드 시간이 빨라지고 모듈이 로드되는 것은 해당 기능이 요구되었을 때뿐입니다.
또한 업데이트는 프로그램의 다른 부분에 영향을 주지 않고 각 모듈에 쉽게 적용할 수 있습니다.예를 들어 급여 프로그램이 있고 세율이 매년 변경될 수 있습니다.이러한 변경이 DLL로 분리되면 전체 프로그램을 다시 빌드하거나 설치할 필요 없이 업데이트를 적용할 수 있습니다.
http://en.wikipedia.org/wiki/Dynamic-link_library
DLL은 Windows 프로그램의 여러 코드 및 프로시저를 유지하기 위해 사용되는 파일 확장자 및 "다이나믹 링크 라이브러리" 파일 형식입니다.소프트웨어와 게임은 DLL 파일을 기반으로 실행됩니다.DLL 파일은 여러 응용 프로그램이 동시에 정보를 사용할 수 있도록 작성되었습니다.
DLL 파일에 대한 자세한 정보를 얻거나 오류가 발생하는 경우 다음 게시물을 참조하십시오.https://www.bouncegeek.com/fix-dll-errors-windows-586985/
DLL(Dynamic Link Libraries)에는 하나 이상의 응용 프로그램 또는 서비스에서 사용되는 리소스가 포함되어 있습니다.클래스, 아이콘, 문자열, 객체, 인터페이스 및 UI를 제외한 개발자가 저장해야 하는 거의 모든 것을 포함할 수 있습니다.
마이크로소프트에 따르면
(DLL) 동적 링크 라이브러리는 응용 프로그램 실행에 필요한 데이터, 코드 또는 리소스를 포함하는 파일입니다.이러한 파일은 Windows 에코시스템에 의해 생성되며 두 개 이상의 응용 프로그램에서 공유할 수 있습니다.
프로그램 또는 소프트웨어가 Windows에서 실행되는 경우 응용 프로그램 작동 방식의 대부분은 프로그램의 DLL 파일에 따라 달라집니다.예를 들어 특정 응용 프로그램에 여러 모듈이 있는 경우 각 모듈이 서로 어떻게 상호 작용하는지는 Windows DLL 파일에 의해 결정됩니다.
자세한 설명을 원하시면 다음 유용한 리소스를 확인하시기 바랍니다.
언급URL : https://stackoverflow.com/questions/124549/what-exactly-are-dll-files-and-how-do-they-work
'programing' 카테고리의 다른 글
내 구독의 파란색 저장소 계정에 사용된 공간 확인 (0) | 2023.04.21 |
---|---|
ImportError: win32com.client라는 이름의 모듈이 없습니다. (0) | 2023.04.21 |
Azure Cosmos DB - 파티션 키 이해 (0) | 2023.04.21 |
bash 명령줄 args $@ vs $*에 액세스합니다. (0) | 2023.04.21 |
Conda가 기본 환경을 활성화하지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.04.21 |