DLL이란 무엇입니까?


90

이것은 매우 멍청한 질문 일 수 있지만, 오늘날의 웹 앱 개발 세계에서 많은 프로그래머는 dll을 많이 다룰 필요가 없으므로 자신의 목적에 대해 배우지 않아도됩니다.

그래서 dll은 무엇입니까?

  1. 그것은 무엇을 위해 사용됩니까?
  2. 어떻게 작동합니까?
  3. 어떻게 만드나요?
  4. 어떤 상황에서 적절한 것을 만들고 있습니까?

나는 dll이 함수 라이브러리를 저장하는 데 사용된다는 말을 들었지만 그 이상으로는 많이 알지 못합니다. 여기 누군가가 나를 깨달아 마침내 Windows 디렉토리의 모든 .dll 파일이 무엇을하는지 궁금해하는 것을 멈출 수 있기를 바랍니다.


커뮤니티 위키는 질문에 대한 실제 답변이없는 경우에 사용해야합니다. 이것은 유효한 질문이며 커뮤니티 위키 모드를 선택하면 자신과 답변자가이 질문에 대한 답변을 얻지 못합니다.
Serafina Brocious

이 질문은 매우 인기있는 일이 될 가능성이있다
타마스 Czinege

1
생각하세요? 조회수는 있지만 투표 할 가능성은 없습니다 ... 어쨌든 이미 4 번의 답변을 받았습니다.
Omar Kooheji

2
이것은 사소한 googleable입니다 ...
annakata

3
예, 이것은 구글링 할 수 있지만, 특히 하나를 만들고 사용하는 것이 적절한 때에 대한 질문에 대한 간결한 설명을 많이 찾지 못했습니다.
Daniel

답변:


55

DLL은 동적 링크 라이브러리입니다. 여러 응용 프로그램 (또는 기타 라이브러리 / 모듈)에서 사용할 수있는 코드 및 / 또는 데이터 모음입니다.

예를 들어 파일을 처리하는 일반적인 방법, GUI 구성 요소 작업 등을 라이브러리에서 사용할 수 있으므로 여러 응용 프로그램이 동일한 기능을 사용할 수 있습니다. 이렇게하면 동일한 항목을 여러 번 빌드해야 할 필요성이 줄어들뿐만 아니라 예를 들어 공통 대화 상자가 응용 프로그램간에 동일하게 유지됩니다.

라이브러리는 런타임에로드 될 수 있으므로 서로 다른 동시 애플리케이션간에 공유됩니다. 이를 동적 연결이라고합니다.

어떤 경우에는 라이브러리가 응용 프로그램 자체에 포함될 수 있습니다. 이를 정적 연결이라고합니다. 정적 연결은 서로 다른 응용 프로그램이 각각 동일한 DLL 복사본을로드하므로 유연성을 희생하면서 배포를 더 쉽게 만듭니다.

그러나 정적 링크는 항상 옵션이 아닙니다. 예를 들어 .NET 애플리케이션을 정적으로 연결할 수 없습니다. .NET 애플리케이션을 실행하려면 사용자에게 .NET 라이브러리가 있어야하며 라이브러리 (또는 .NET에서 호출되는 어셈블리)는 런타임에로드됩니다.

DLL은 응용 프로그램을 만드는 데 사용되는 것과 동일한 도구로 만들어집니다. 구체적인 세부 사항은 사용되는 도구에 따라 크게 달라집니다.


답변 주셔서 감사합니다. 제가 궁금한 것은 응용 프로그램이 dll에서 어떤 기능을 사용할 수 있는지 어떻게 알 수 있습니까? dll 자체는 모두 기계 코드 맞습니까? 그렇다면 dll의 공용 함수 서명은 어떻게 노출됩니까?
Daniel

대부분의 언어에 대해 모르지만 Visual Studio의 자동 완성 기능은 사용 가능한 모든 기능을 보여줍니다.
Grant

1
그러나 dll이 기계어 코드 인 경우 자동 완성은 사용 가능한 기능이 무엇인지 어떻게 알 수 있습니까?
Daniel

2
기계는 기계 코드를 읽을 수 있습니다. DLL에는 아이콘, 문자열, 글꼴이 포함될 수 있습니다. 아마도 어딘가에 포함 된 목록이있을 것입니다.
Grant

1
Visual C ++에는 dumpbin이라는 도구가 포함되어 있습니다. "dumpbin / exports whatever.dll"을 실행하면 내보내는 기능과 항목 (예 : DLL을로드하는 프로그램에서 사용할 수 있음)을 알 수 있습니다.
Graeme Perrow

29

DLL = 동적 링크 라이브러리

이름은 실제로 그들이 성취 한 것을 아주 잘 설명합니다.

도서관

특정 문제 도메인에 대한 코드를 단일 위치로 격리 할 수 ​​있습니다. 그런 다음 여러 응용 프로그램간에 공유하십시오. 라이브러리는 버그를 수정하거나 기능을 추가하기 위해 언제든지 다른 라이브러리로 교체 할 수 있습니다.

링크

라이브러리의 논리가 응용 프로그램으로 직접 컴파일되지 않도록 라이브러리를 응용 프로그램에 "연결"할 수 있습니다.

동적

라이브러리는 요청시로드 할 수 있습니다. 거대한 단일 EXE를 메모리에로드하는 대신 OS는 필요한 부분 만로드 할 수 있습니다. 또한 DLL이 애플리케이션간에 공유되는 경우 OS는 라이브러리로드 방법을 최적화하고 앱간에 공유 할 수 있습니다.


10

DLL (동적 링크 라이브러리) 파일은 더 큰 프로그램이 잘 실행되도록 돕는 작은 "하위 프로그램"으로 설명 될 수 있습니다. 이들은 다양한 하드웨어 및 소프트웨어 리소스 (런타임 세션의 다양한 지점에서)를 "필요에 따라"기반으로 기본 실행 프로그램에 연결하는 수단을 제공합니다. 이렇게하면 프로그램이 처음 실행될 때 기본 실행 프로그램과 관련된 모든 작업을 컴퓨터의 RAM (랜덤 액세스 메모리)에로드 할 필요가 없습니다.

DLL이 전달하는 소프트웨어 리소스에는 프로그램을 계속 실행하는 데 실제로 필요하지 않은 다양한 프로그램 기능에 대한 코드가 포함되어 있습니다. 전혀 부를 수 있습니다. 프로그램이 처음 실행될 때 해당 기능 (그리고 주어진 프로그램에 대해 상당한 수의 기능이있을 수 있음)을 컴퓨터의 RAM에로드 한 다음 세션 내내 유지하는 것은 RAM 공간을 낭비하는 것입니다. 프리미엄.

주요 발전 :

DLL의 개발은 컴퓨팅의 주요 발전이었습니다. 그 이유는 프로그램이 처음로드 될 때 프로그램과 관련된 모든 작업 (거의 사용되지 않는 기능 포함)을 RAM에로드해야했기 때문입니다. 그 결과 컴퓨팅이 매우 비효율적이며 다양한 프로그램에서 속도가 느려졌습니다. 또한 RAM에 대한 부담 때문에 간단한 프로그램 몇 개를 실행하여 멀티 태스킹을하는 것도 매우 어려웠습니다.

고려 사항 :

DLL은 일반적으로 버전에 따라 다릅니다. 예를 들어 프로그램의 버전 1 (또는 경우에 따라 프로그래밍 언어)에서 잘 작동하는 것들은 버전 2에서 잘 작동하지 않을 수 있습니다. 일반적인 규칙은 이전 버전의 DLL이 작동하지 않는 경향이 있다는 것입니다. 새 버전에서는 잘 작동하지만 새 버전은 일반적으로 이전 버전의 프로그램이나 프로그래밍 언어와 잘 작동합니다.


7

동적으로 연결된 라이브러리.

예를 들어, 다른 사람의 DLL을 응용 프로그램에로드 한 경우 여기에서 약간의 프로그래밍을 사용할 수 있습니다.

항상 "5"등으로 시작하는 난수를 생성하는 DLL을로드 할 수 있습니다.

프로그램에서 CrazyDLL.GenerateRandomNumbersSorta ()를 호출하면 번호가 반환됩니다.

실제 예를 들어, 4 개의 텍스트 상자를 결합한 DLL (IP 주소를 입력하는 데 사용함)이 있으며 256 개 미만의 숫자 만 자동으로 받아들이고 백 스페이스 키를 눌러 이전 텍스트 상자로 이동하는 것을 처리합니다.

해당 코드로 DLL을 만들었으며 이제 모든 코드를 반복해서 복제하지 않고도 해당 IP 주소 텍스트 상자 컬렉션을 더 많이 끌어서 놓기 만하면됩니다.

동일한 DLL에는 IP 주소를 16 진수 문자열 및 기타 유용한 코드로 변환하는 기능도 있습니다.



1

DLL = 동적 로드 링크 라이브러리. 말씀하신대로 기본적으로 함수, C ++ 클래스 및 / 또는 전역 변수의 모음입니다. DLL을 정적으로 (예 : 프로그램이 시작될 때 OS가 자동으로로드 함) 또는 동적 (프로그램이 명시 적으로로드 함)으로로드 할 수 있으며, 이때 DLL 내부의 기능과 항목을 프로그램에서 사용할 수 있습니다.

하나를 만드는 것은 main()함수 가 필요하지 않다는 점을 제외하면 EXE를 만드는 것과 비슷 합니다. 링커에게 EXE가 아닌 DLL을 생성하도록 지시하는 링커 지시문이 있습니다.

이 작업을 수행하려는 주된 이유는 코드를 각 코드에 연결하는 대신 한 위치에 일부 코드를 캡슐화하고 여러 exe에서 사용하는 것입니다.

다소 역사적인 이유는 일부 코드가 물리적으로 다른 파일에 있기 때문에 exe가 더 작을 수 있기 때문입니다. 이것은 exe가 메모리에서 차지하는 공간이 더 적을 수 있음을 의미합니다. 최신 시스템에서는 Windows Mobile에서는 여전히 문제가 될 수 있지만 예전보다 덜 문제가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.