Tôi đã thấy trong thư viện trình điều khiển ba tệp này. Ba tệp có liên quan như thế nào, thứ tự các tệp được biên dịch là gì và nội dung của mỗi tệp là gì? Thêm vào đó, tôi cũng đã thấy các tệp .a giống như .lib?Tệp Header (.h), tệp Thư viện (.lib) và tệp DLL (.dll) có liên quan như thế nào
Trả lời
.lib và .dll là cả hai tệp thực thi của thư viện Windows (tệp .o hoặc .obj), với tệp (.lib) cũ có chứa thứ (hàm, định nghĩa, v.v) mà bạn phải liên kết tĩnh với tệp thi hành của dự án của bạn. Sau này (.dll) đã có trong hệ thống của bạn hoặc bạn đưa nó vào hệ thống của bạn và nó được liên kết động với tệp thi hành của dự án của bạn.
Đối với hệ thống UNIX/Linux, phần mở rộng tệp là .a và .so tương ứng (nghĩa là, .a thay vì .lib, và .so thay vì .dll).
Trong mọi trường hợp, khi soạn thảo dự án của bạn, bạn phải #include
một hoặc nhiều tệp .h cung cấp cho bạn bởi thư viện bạn đang sử dụng (chúng được gọi là tập tin tiêu đề), bởi vì đó là nơi thứ bên trong thực thi của thư viện được xác định.
EDIT
Ưu điểm chính của một thư viện liên kết tĩnh là nó là khép kín (không phụ thuộc bên ngoài) nhưng nó làm tăng kích thước của tập tin thực thi của riêng bạn. Nhược điểm chính là các phiên bản trong tương lai phải được biên dịch lại và phân phối lại.
Đối với thư viện được liên kết động, chúng tôi chỉ phân phối lại các tệp thực thi thư viện được cập nhật. Những bất lợi chính là chương trình của chúng tôi dựa vào thư viện đã được cài đặt trên hệ thống của khách hàng.
Cần lưu ý rằng còn có một cái gì đó được gọi là "Thư viện nhập khẩu" kiểm tra http://stackoverflow.com/questions/3573475/how-does-the-import-library-work-details –
- 1. Tệp DLL và LIB
- 2. Khi xây dựng một tệp DLL, tệp LIB được tạo có chứa tên DLL không?
- 3. Tệp DLL và LIB - điều gì và tại sao?
- 4. lib.exe, Visual Studio, tạo các tệp .lib từ tệp dll và def
- 5. Chuyển đổi thư viện liên kết tĩnh thành dll động
- 6. Làm cách nào để có CMake tạo dll và tệp lib phù hợp?
- 7. Dự án DLL không tạo tệp .exp và .lib
- 8. Kích thước tệp DLL có quan trọng không?
- 9. Làm cách nào để xây dựng thư viện nhập (.lib) VÀ DLL trong Visual C++?
- 10. Sự khác nhau giữa các tệp .dll, .lib, .h là gì?
- 11. Plugin DLL phụ thuộc vào các tệp DLL khác
- 12. Liên kết không được quản lý C++ DLL với quản lý C++ lớp thư viện DLL
- 13. Đọc tài nguyên từ tệp DLL
- 14. C# Tệp cấu hình DLL
- 15. Sử dụng một DLL có tiêu đề .h trong C++
- 16. Làm thế nào để tạo một tệp JAR bao gồm các tệp DLL?
- 17. Nhưng tôi không muốn tệp .lib hoặc .exp cho thư viện COM của tôi!
- 18. Có gì bên trong tệp .lib của thư viện tĩnh, thư viện động được liên kết tĩnh và thư viện động được liên kết động?
- 19. Chính xác thì các tệp DLL là gì và chúng hoạt động như thế nào?
- 20. Chỉ định trễ tải dll với #pragma trong tệp cpp
- 21. file header Tương tự cho cả hai DLL và Thư viện tĩnh
- 22. Thư viện tĩnh C++ - cách tạo tệp .a từ .lib?
- 23. Thiếu tệp, DirectX SDK (d3dx9.lib, d3dx9.h)
- 24. Sử dụng các tệp DLL trong VBScript
- 25. Xác thực các tệp DLL trong C#
- 26. Làm thế nào để cập nhật một dll C++ mà không cần phải liên kết lại tệp exe với tệp lib?
- 27. Tệp DLL dành cho windows 7 64bit
- 28. Làm thế nào để phân tích tệp kết xuất từ tệp DLL Delphi?
- 29. Làm cách nào để thêm tệp kê khai vào tệp DLL .NET?
- 30. Khả năng tương thích của * .dll * .a * .lib * .def giữa VisualStudio và gcc
mã của bạn chứa tiêu đề .h và tệp nguồn (.c/.cpp). Tiêu đề là các đoạn mã được sao chép/dán mỗi khi bạn #bao gồm chúng trong tệp nguồn của bạn. Khi mã được biên dịch, trình biên dịch sẽ xuất ra các tệp nguồn dưới dạng tệp đối tượng (.o hoặc .obj). Tệp .lib chỉ đơn giản là một tệp lưu trữ chứa tất cả các tệp đối tượng. Thư viện DLL được biên dịch mã có một loạt các hàm được xuất mà bạn có thể sử dụng lại trong mã của mình. Một .exe được biên dịch mã gọi hàm main() khi khởi động. –