Файлы lib читаются компоновщиком, а файл dll используется во время выполнения. Файл lib по существу бесполезен во время выполнения, и компоновщик не способен читать файл dll (за исключением, возможно, неуместного здесь).
Различия между использованием файлов lib для статических и динамических ссылок могут сбивать с толку, но если вы немного разберетесь в истории, это станет очень ясным.
Первоначально были только статические библиотеки. Для статической библиотеки .lib-файл содержит файлы obj. Каждый файл obj является выходом одного и только одного входного файла исходного кода компилятора. Файл lib - это просто набор связанных obj-файлов, очень похожий на размещение obj-файлов в каталоге. По сути, это и есть файл lib, библиотека obj-файлов. Для статической ссылки все файлы obj, используемые исполняемым файлом, объединяются в один файл. Сравните это с динамической ссылкой, в которой исполняемый файл находится в файле, отдельном от другого кода, который он использует.
Чтобы реализовать динамическое связывание, Microsoft изменила использование файлов lib таким образом, чтобы они ссылались на файл dll, а не на места в файле obj. Кроме этого, вся информация, которая находится в библиотеке для статической ссылки, такая же, как и для динамической ссылки. Все они одинаковы с информацией в них, за исключением того, что файл lib для динамической ссылки определяет файл dll.