Как работает динамическая компоновка?
В Windows (LoadLibrary) вам нужна DLL для вызова во время выполнения, но во время соединения вам необходимо предоставить соответствующий .lib файл или программа не будет связывать... Что делает файл .lib? Описание методов .dll? Разве это не то, что содержат заголовки?
Кроме того, на * nix вам не нужен файл lib... Как, как компилятор знает, что методы, описанные в заголовке, будут доступны во время выполнения?
Как новичок, когда вы думаете об одной из двух схем, то другой, ни один из них не имеет смысла...