2012-02-12 30 views
6

Tôi có một số tệp .lib nhưng tôi không có quyền truy cập vào tệp tiêu đề .h. Điều này có nghĩa là các tệp .lib giờ đây vô ích?Các tệp .lib có vô dụng nếu không có tệp tiêu đề không?

Nếu không, làm cách nào để sử dụng lại?

Tôi đã thử sử dụng dòng này trong chương trình của mình, nhưng nó dường như không được biên dịch vào tệp thực thi cuối cùng (được xác minh bằng CFF Explorer).

#pragma comment(lib, "SomeLibFile.lib") 

Vì vậy, cách duy nhất để liên kết .lib là sử dụng tệp tiêu đề của nó? Có bất kỳ công cụ nào để khôi phục tệp tiêu đề cho tệp .lib không?

+4

Tại sao bạn không chỉ cần truy cập trang tải xuống của thư viện và tải xuống lại tiêu đề? – Lefteris

+0

Tôi đã sử dụng công cụ để tạo tệp. Nó đầu ra vào .dll và .lib vv Tôi không có vấn đề bằng cách sử dụng .dll, nhưng tôi tò mò là tại sao nó tạo ra một .lib không có tệp .h. – user25101622

+1

Bạn sử dụng dll như thế nào? Phải có một tiêu đề, phải không? Trừ khi bạn đang làm. Tại sao bạn lại mơ hồ như vậy? Hãy cho chúng tôi biết tên của công cụ. –

Trả lời

5

Phụ thuộc vào cách mã .lib được viết. Nếu nó là một api, đây là những gì từ khóa extern cho. Bạn có thể tìm thấy một số loại chương trình mà sẽ cho bạn thấy chức năng xuất khẩu. Sau đó, bạn có thể khai báo chúng là extern trong mã của bạn. Vấn đề sẽ là cấu trúc dữ liệu của bạn mặc dù.

Dù sao, bạn về mặt kỹ thuật không phải có tệp tiêu đề, bạn có thể tự xác định cấu trúc dữ liệu và khai báo các hàm với từ khóa bên ngoài.

Bạn chỉ có thể liên kết .lib khi bạn chạy trình liên kết ở cuối quá trình biên dịch.

+2

đừng làm cho tôi sai, cách tối ưu để làm điều này là tìm tiêu đề. –

2

Bạn có thể liên kết với tệp .lib bằng cách truyền nó trên dòng lệnh trình liên kết, không cần #pragma. Tất nhiên, thực sự sử dụng bất kỳ thứ gì bên trong nó đòi hỏi phải biết các quy ước gọi, chữ ký chức năng, bố trí các kiểu do người dùng định nghĩa, vv Đó là tất cả thường được cung cấp bởi tệp tiêu đề, nhưng cũng có thể tìm thấy trong tài liệu.

Trong mọi trường hợp, tệp tiêu đề không được tạo bởi trình biên dịch (MIDL và CORBA sử dụng tệp tiêu đề do máy tạo, nhưng tất cả thông tin trong tiêu đề vẫn được nhập thủ công vào tệp .idl). Và trừ khi công nghệ của bạn sử dụng một thư viện kiểu, thông tin cần thiết không được lưu giữ với một DLL.

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