Statik kütüphaneler (LIB) ve dinamik kütüphaneler (DLL) vardır - ancak .LIB dosyalarının statik kütüphaneler (nesne dosyaları içeren) veya içe aktarma kütüphaneleri (bağlayıcıyı bir DLL'e bağlamasına izin veren simgeler içeren) olabileceğini unutmayın.
Birçok programda kullanmak istediğiniz koda sahip olabileceğiniz için kütüphaneler kullanılır. Örneğin, bir dizedeki karakter sayısını sayan bir işlev yazarsanız, bu işlev birçok programda yararlı olacaktır. Bu işlevi düzgün çalıştıktan sonra, kodu her kullandığınızda yeniden derlemek zorunda kalmazsınız, böylece bu işlevin yürütülebilir kodunu bir kitaplığa koyarsınız ve bağlayıcı derlenmiş kodu ayıklayıp programınıza ekleyebilir . Bu nedenle statik kütüphanelere bazen 'arşiv' denir.
Dinamik kütüphaneler bunu bir adım daha ileri götürür. Her programda yer kaplayan kütüphane işlevlerinin birden fazla kopyasının olması boşa gitmiş gibi görünüyor. Neden hepsi işlevin bir kopyasını paylaşamıyor? Dinamik kütüphaneler bunun içindir. Kitaplık kodunu derlendiğinde programınıza oluşturmak yerine, belleğe yüklenirken programınıza eşleyerek çalıştırılabilir. Aynı işlevleri kullanan aynı anda çalışan birden fazla programın tümü tek bir kopyayı paylaşabilir ve hafızadan tasarruf edebilir. Aslında, kodunuzdaki yola bağlı olarak dinamik kitaplıkları yalnızca gerektiği gibi yükleyebilirsiniz. Herhangi bir yazdırma işlemi yapmıyorsanız, yazıcı yordamlarının belleği kaplamasına gerek yoktur. Öte yandan, bu, programınızın çalıştığı her makineye dinamik kütüphanenin bir kopyasına sahip olmanız gerektiği anlamına gelir.
Örnek olarak, 'C' ile yazılmış hemen hemen her programın 'C çalışma zamanı kitaplığı adı verilen bir kütüphaneden fonksiyonlara ihtiyacı olacaktır, ancak az sayıda programın tüm fonksiyonlara ihtiyacı olacaktır. C çalışma zamanı hem statik hem de dinamik sürümlerde gelir, böylece programınızın belirli gereksinimlere bağlı olarak hangi sürümü kullandığını belirleyebilirsiniz.