동적 연결 라이브러리 (DLL)은 사용자 프로그램이 실행될 때, 사용자 프로그램에 연결되는 시스템 라이브러리이다. 동적 연결 개념은 동적 적재와 유사하다. 동적 적재에서는 loading이 실행 시까지 미루어졌었지만 동적 연결은 linking이 실행 시기까지 미루어지는 것이다. 동적 연결은 주로 표준 C언어 라이브러리와 같은 시스템 라이브러리에 사용된다.
만약 DLL 기능이 없다면 해당 라이브러리의 사본이 프로그램에 포함되어야한다. 이러한 문제는 프로그램의 크기가 커지며, 해당 라이브러리를 사용하는 프로세스들이 많으면 메인 메모리에 중복되는 영역들이 낭비를 일으킨다는것이다.
DLL은 메모리에 DLL 인스턴스가 하나만 존재할 수 있다. 그렇기에 여러 프로세스들이 공유하면서 사용할 수 있게 되며, 메모리 영역의 중복되는 부분을 줄일 수 있다. 또 필요에 따라 특정한 라이브러리만 새로운 버전으로 교체할 수 있다. 라이브러리를 새 버전으로 교체한다면 라이브러리를 사용하던 프로세스들은 재컴파일 없이 새로운 라이브러리를 사용할 것이다.
프로그램이 동적 라이브러리에 있는 루틴을 호출하면 DLL을 찾아 필요한 경우 메모리에 적재한다. 이후 호출한 루틴의 함수를 이 DLL이 적재된 메모리 주소로 조정한다. 동적 연결과 공유 라이브러리는 운영체제의 도움이 필요하다. 메모리에 있는 프로세스들이 각자의 공간은 자기만 액세스할 수 있도록 보호 된다면, 운영체제만이 해당 루틴이 있는지 검사해 줄 수 있으며 운영체제만이 여러 프로세스가 같은 메모리 주소로 공용할 수 있도록 해줄 수 있다.