2010-04-28 39 views
48

Trong quá trình biên dịch và liên kết, việc sử dụng .exp là gì? Sự khác nhau giữa .lib và .dll là gì? Tôi biết rằng .lib sẽ được sử dụng, trong khi liên kết và .dll sẽ được sử dụng khi chạy chương trình. Nhưng chính xác thì sự khác nhau giữa .lib và .dll là gì?sử dụng .exp là gì và sự khác biệt giữa .lib và .dll

Tệp .lib không chứa mã cho các chức năng đến từ tệp .dll? Nhu cầu sử dụng hai tệp riêng biệt là gì?

Vui lòng làm rõ. Cảm ơn trước

Trả lời

71

Trong trường hợp thư viện nhập cho DLL, tệp .lib thực hiện không chứa bất kỳ mã thực tế nào. Về cơ bản nó chỉ chứa một danh sách các hàm trong DLL liên kết - đủ cho trình liên kết nhúng một tham chiếu đến DLL đó vào một cái gì đó được liên kết với thư viện, nhưng không có nhiều thứ khác.

Tệp .exp là tệp xuất - về cơ bản chỉ giống như tệp .lib. Nó được sử dụng (ít nhất là chủ yếu) khi bạn có một phụ thuộc vòng tròn. Ví dụ, giả sử bạn có một DLL hoạt động như một trình cắm thêm cho một tệp thực thi. Tệp thực thi cung cấp một số hàm được xuất để sử dụng bởi các trình cắm thêm DLL, nhưng cũng cần có khả năng gọi một số hàm trong các trình cắm thêm (ví dụ: để tải và khởi tạo một trình cắm thêm).

DLL sẽ không liên kết cho đến khi tệp thi hành được xây dựng để cung cấp tệp .lib - nhưng tệp thi hành sẽ không liên kết cho đến khi DLL được tạo để cung cấp tệp .lib. Để phá vỡ sự phụ thuộc, bạn chạy trình liên kết đối với tệp thực thi, không thành công (vì nó không thể tìm thấy tệp .lib cho tệp DLL), nhưng sẽ tạo tệp .exp. Sau đó bạn liên kết DLL với tệp .exp cho tệp thực thi. Sau đó bạn có thể chạy lại liên kết để tạo ra tệp thực thi, sử dụng tệp .lib cho tệp DLL.

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