Trong Windows, chương trình máy khách không cần phải liên kết với một thư viện tĩnh để truy cập các chức năng trong một DLL. Liên kết động có thể xảy ra hoàn toàn vào thời gian chạy mà không cần chương trình khách hàng thậm chí còn nhận thức được sự tồn tại của DLL tại thời điểm nó được biên dịch.
Ví dụ, nếu bạn muốn gọi một tên hàm "foo" trong một DLL có tên là "bar.dll", bạn có thể viết mã như thế này:
HINSTANCE hinst = LoadLibrary("bar.dll");
FARPROC foo = GetProcAddress(hinst, "foo");
foo();
Và "foo" và "thanh. dll "có thể dễ dàng có được các giá trị mà chỉ được thiết lập tại thời gian chạy, nói thông qua một tập tin cấu hình hoặc một số đầu vào người dùng khác.
Mục đích của thư viện tĩnh là tự động hóa quy trình tải động này, bằng cách tạo các sơ đồ xuất hiện giống như các hàm thường xuyên theo chương trình khách hàng, nhưng được liên kết với DLL khi chạy. Thông thường liên kết này xảy ra tại thời điểm quá trình khách hàng được tải, nhưng các thư viện cũng có thể được tạo ra sẽ tải và liên kết theo yêu cầu, do đó DLL sẽ không được đưa vào bộ nhớ cho đến khi nó thực sự cần thiết. Đây là thư viện tĩnh xác định khi nào liên kết xảy ra.
Phần lớn, trình biên dịch có thể tự động tạo các thư viện này, vì vậy về mặt kỹ thuật chúng không cần thiết khi chỉ liên kết đến các hàm DLL. Tuy nhiên, một ngoại lệ cho điều này (mà tôi biết) là khi liên kết đến các biến được chia sẻ.
Trong tệp DLL Windows, bạn có thể tạo phân đoạn dữ liệu được chia sẻ với các biến có thể được truy cập bằng bất kỳ quá trình nào đã tải DLL đó. Thông tin về kích thước và kiểu của các biến đó được lưu trữ trong thư viện tĩnh liên quan, và không thể được xác định từ DLL một mình. Để truy cập vào các biến đó, chương trình máy khách phải liên kết với thư viện tĩnh cho DLL đó.
Theo như tôi biết, Thư viện chia sẻ Linux không hỗ trợ khái niệm như vậy.
Cập nhật
Tôi cũng nên đề cập đến rằng trên Windows nó có thể tạo ra một DLL nơi điểm vào chức năng chỉ được xuất khẩu bởi thứ tự (số) chứ không phải là tên. Điều này có thể được coi là một dạng ẩn dữ liệu và thường sẽ được sử dụng khi một người triển khai thực hiện các chức năng nhất định để giữ riêng tư.
Người nào đó có quyền truy cập vào thư viện tĩnh sẽ có thể gọi các hàm đó theo tên, vì thư viện sẽ có các chi tiết liên kết tên hàm với thứ tự thích hợp. Bất cứ ai chỉ có DLL sẽ phải liên kết thủ công với các hàm theo thứ tự hoặc tạo thư viện tĩnh của riêng chúng với tên được tạo sẵn.
Nó được gọi là * thư viện nhập * và các công cụ tồn tại để trích xuất chúng từ các tệp DLL. –