2013-11-26 38 views
14

Trong ngôn ngữ C sự khác nhau giữa thư viện tĩnh và thư viện động là gì?Sự khác biệt giữa thư viện tĩnh và thư viện động

+0

Hãy thử điều này [http://stackoverflow.com/questions/20229364/what-is-the-difference-between-a-static-library-and-a-dynamic-one][1] [1]: http://stackoverflow.com/questions/20229364/what-is-the-difference-between-a-static-library-and-a-dynamic-one – Stef

Trả lời

32

Câu hỏi này hơi quá rộng để giải thích, nhưng tôi sẽ cố gắng cung cấp cho bạn một ý tưởng cơ bản mà từ đó bạn có thể nghiên cứu thêm.

Thứ nhất, bạn cần biết thư viện là gì. Về cơ bản, một thư viện là một tập hợp các hàm. Bạn có thể nhận thấy rằng chúng tôi đang sử dụng các hàm không được xác định trong mã của chúng tôi hoặc trong tệp cụ thể đó. Để có quyền truy cập vào chúng, chúng tôi bao gồm một tệp tiêu đề, có chứa các khai báo của các hàm đó. Sau khi biên dịch, có một quá trình được gọi là liên kết, liên kết các khai báo hàm đó với các định nghĩa của chúng, nằm trong một tệp khác. Kết quả của việc này là tệp thực thi thực tế.

Bây giờ, liên kết như tôi đã mô tả là liên kết tĩnh. Điều này có nghĩa là mọi tập tin thực thi có trong nó mọi thư viện (tập hợp các hàm) mà nó cần. Đây là một sự lãng phí không gian, vì có nhiều chương trình có thể cần các chức năng tương tự. Trong trường hợp này, trong bộ nhớ sẽ có nhiều bản sao của cùng một chức năng. Liên kết động ngăn chặn điều này, bằng cách liên kết tại thời gian chạy, không phải lúc biên dịch. Điều này có nghĩa là tất cả các chức năng đều nằm trong một không gian bộ nhớ đặc biệt và mọi chương trình đều có thể truy cập chúng, mà không cần nhiều bản sao của chúng. Điều này làm giảm lượng bộ nhớ cần thiết.

Như tôi đã đề cập ở phần đầu của câu trả lời của tôi, đây là một lời giải thích rất đơn giản để cung cấp cho bạn một sự hiểu biết cơ bản. Tôi đề nghị bạn nên nghiên cứu thêm về chủ đề này.

+0

Ngắn gọn và được giải thích rõ ràng. Cảm ơn bạn! – SRG

2

Trong cửa sổ:

Thư viện tĩnh là tệp .lib sẽ được liên kết bên trong tệp thực thi của bạn và sẽ không thay đổi theo thời gian.

Thư viện động là một tệp .dll được liên kết với tệp thi hành của bạn và có thể thay đổi tùy thuộc vào tệp dll bạn tải khi bạn thực thi nó.

+0

Không chắc tôi có dll trong Linux. – Daniel

Các vấn đề liên quan