Có thư viện tĩnh (LIB) và thư viện động (DLL) - nhưng lưu ý rằng tệp .LIB có thể là thư viện tĩnh (chứa tệp đối tượng) hoặc nhập thư viện (chứa ký hiệu để cho phép trình liên kết liên kết với DLL).
Thư viện được sử dụng vì bạn có thể có mã mà bạn muốn sử dụng trong nhiều chương trình. Ví dụ: nếu bạn viết một hàm đếm số ký tự trong một chuỗi, hàm đó sẽ hữu ích trong nhiều chương trình. Khi bạn làm cho hàm đó hoạt động chính xác, bạn không muốn phải biên dịch lại mã mỗi khi bạn sử dụng nó, vì vậy bạn đặt mã thực thi cho hàm đó vào thư viện và trình liên kết có thể trích xuất và chèn mã đã biên dịch vào chương trình của bạn . Thư viện tĩnh đôi khi được gọi là 'lưu trữ' vì lý do này.
Các thư viện động tiến thêm một bước này. Có vẻ lãng phí khi có nhiều bản sao của các chức năng thư viện chiếm không gian trong mỗi chương trình. Tại sao tất cả họ không thể chia sẻ một bản sao của chức năng? Đây là những gì các thư viện động dành cho. Thay vì xây dựng mã thư viện vào chương trình của bạn khi nó được biên dịch, nó có thể được chạy bằng cách ánh xạ nó vào chương trình của bạn khi nó được tải vào bộ nhớ. Nhiều chương trình chạy cùng lúc sử dụng các chức năng giống nhau đều có thể chia sẻ một bản sao, tiết kiệm bộ nhớ. Trong thực tế, bạn chỉ có thể tải các thư viện động khi cần thiết, tùy thuộc vào đường dẫn thông qua mã của bạn. Không có điểm nào trong việc máy in thường xuyên chiếm bộ nhớ nếu bạn không thực hiện bất kỳ in ấn nào. Mặt khác, điều này có nghĩa là bạn phải có một bản sao của thư viện động được cài đặt trên mỗi máy mà chương trình của bạn chạy.
Ví dụ, hầu hết mọi chương trình được viết bằng 'C' sẽ cần các hàm từ thư viện gọi là thư viện thời gian chạy 'C, mặc dù ít chương trình sẽ cần tất cả các hàm. Thời gian chạy C có cả phiên bản tĩnh và động, vì vậy bạn có thể xác định phiên bản nào chương trình của bạn sử dụng tùy thuộc vào nhu cầu cụ thể.