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