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