2009-02-24 38 views
55

Tôi muốn có một dự án Visual Studio đơn lẻ xây dựng tệp DLL và tệp thư viện nhập (.lib). (Thư viện nhập khẩu là một thư viện được liên kết tĩnh có nhiệm vụ tải tệp DLL đó trong các dự án khác sử dụng nó).Làm cách nào để xây dựng thư viện nhập (.lib) VÀ DLL trong Visual C++?

Vì vậy, tôi đã đi đến Visual Studio C++ 2008 Express Edition, tạo ra một dự án mới của loại thư viện lớp, và thiết lập các "cấu hình loại" là "Dyanamic Library (.dll)".

Nhưng khi tôi xây dựng giải pháp, tệp đầu ra có liên quan duy nhất tôi thấy là tệp DLL; Tôi không thấy bất kỳ tệp LIB nào được tạo. Tôi nhìn vào thư mục dự án và tất cả các thư mục con (Release and Debug).

Tôi tin rằng có thể xây dựng một tệp LIB và tệp DLL cùng một lúc vì on the MSDN it says "The linker creates the import library when the DLL is built." Ngoài ra, another user of this website is creating LIB and DLL files at the same time using Visual C++.

Vậy làm cách nào tôi có thể thực hiện?

+1

Tôi chỉ gặp vấn đề chính xác khi tệp .lib của tôi không được tạo. Sau khi googling thông qua tất cả các thông tin tôi có thể tìm thấy về nguyên nhân có thể và cẩn thận đi qua tất cả các câu trả lời dưới đây tôi cuối cùng đã tìm ra rằng đó là vì tập tin .cpp của tôi đã không bao gồm tập tin .h của tôi. :(Chỉ cần ném nó ra ở đây để bình luận của tôi có thể (với một xác suất nhỏ) giúp một ai đó/bản thân mình nếu sai lầm ngu ngốc của tôi được lặp đi lặp lại trong một số tương lai xa ... – user1884905

Trả lời

19

Bằng cách chọn 'Thư viện lớp', bạn vô tình yêu cầu tạo Thư viện .Net bằng cách sử dụng mở rộng CLI (được quản lý) của C++.

Thay vào đó, hãy tạo dự án Win32 và trong Cài đặt ứng dụng trên trang tiếp theo, hãy chọn 'DLL'.

Bạn cũng có thể tạo MFC DLL hoặc ATL DLL từ các lựa chọn thư viện đó nếu bạn muốn đi tuyến đường đó, nhưng có vẻ như bạn không thích.

68

Dự án DLL của bạn có thực sự xuất không? Nếu không có xuất khẩu, trình liên kết sẽ không tạo ra một thư viện import .lib.

Trong phiên bản phi-Express của VS, tên nhập khẩu libray được specfied trong các thiết lập dự án ở đây:

Configuration Properties/Linker/Advanced/Import Library 

tôi giả sử nó là như nhau trong Express (nếu nó thậm chí còn cung cấp khả năng cấu hình tên).

+6

Cảm ơn Michael, Trong trường hợp của tôi lib không được tạo ra vì không có xuất khẩu. – Uday

+4

OK, vậy điều này có nghĩa là gì? tôi chỉ định thư viện nhập khẩu vào dự án dll của tôi và nó vẫn không tạo dll. Tôi đặt nó vào dự án sử dụng DLL của tôi và nó không gây ra nó được xây dựng hoặc. Tôi đang sử dụng Visual C++ 2010 Express – Thom

+1

Bạn có thể làm rõ một chút về điều này? Chỉ định thư viện nhập một mình dường như không tạo tệp .lib. –

8

bạn cũng nên xác định def tên trong các thiết lập dự án ở đây:

Configuration> Properties/Input/nâng cao/Module> Định nghĩa tập tin

+4

Tọa lạc tại 'Thuộc tính cấu hình'/'Trình liên kết' /' Đầu vào'/'Mô-đun định nghĩa mô-đun' trong VS2010 – Pakman

+0

Làm thế nào để tạo tệp định nghĩa? Điều gì đi vào nó? –

+0

Cảm ơn bạn ... điều này đã khiến tôi lên tường. –

23

OK, vì vậy tôi tìm thấy câu trả lời từ http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ nói rằng vấn đề này là do không xuất khẩu bất kỳ biểu tượng nào và hướng dẫn thêm về cách xuất các ký hiệu để tạo tệp lib. Để làm như vậy, hãy thêm đoạn mã sau vào tệp .h của bạn cho tệp DLL của bạn.

#ifdef BARNABY_EXPORTS 
#define BARNABY_API __declspec(dllexport) 
#else 
#define BARNABY_API __declspec(dllimport) 
#endif 

Trường hợp BARNABY_EXPORTS và BARNABY_API là định nghĩa duy nhất cho dự án của bạn. Sau đó, mỗi chức năng bạn xuất bạn chỉ cần đặt trước bởi:

BARNABY_API int add(){ 
} 

Vấn đề này có thể được ngăn chặn bằng cách nhấn vào biểu tượng Export hộp về dự án mới DLL Wizard hoặc bằng biểu quyết có cho lobotomies cho các lập trình máy tính.

+0

Bạn có thể chỉnh sửa nội dung này sao cho đây không phải là bản sao chính xác câu trả lời khác của bạn? Làm cho nó áp dụng cho câu hỏi này là một điểm khởi đầu tốt. Cảm ơn. – Will

+0

Đã sửa, Will. Tôi vô tình đăng câu trả lời cho trang này. Tôi đã dọn dẹp đống lộn xộn của mình. Cảm ơn vì đã giám sát tôi. – Thom

+4

+1 cho "lobotomies cho lập trình viên máy tính". –

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