2013-08-20 32 views
6

Tôi có dự án studio trực quan 2010, sử dụng lib tĩnh và động (.lib.dll), dự án được biên soạn và xây dựng thành công dưới dạng .exe cả trong chế độ phát hành và gỡ lỗi, mã là c và C++.Làm thế nào để xây dựng một giải pháp phòng thu trực quan 2010 thành một dll độc lập?

Cách thích hợp để biên dịch và gói tất cả giải pháp cho một tệp độc lập .dll là gì.

Tôi muốn có một tệp dll, tôi sẽ có thể tải nó trong c, C++, C# dự án khác một cách an toàn.

trong trường hợp của tôi, tôi muốn tải nó trong teraterm và trong ứng dụng C# tự phát triển đơn giản khác.

+0

Giải pháp không thể biên dịch thành một dll riêng lẻ. Mỗi dự án trong một giải pháp được xây dựng cho một mục tiêu xây dựng cụ thể, cho dù đó là một dll, exe, hoặc cái gì khác. Để chỉ có một dll, bạn chỉ nên có một dự án trong giải pháp của mình. Những gì bạn có thể muốn là có một dự án biên dịch thành một dll (vì vậy nó có thể được nạp trong một ứng dụng khác) và một dự án khác tham chiếu đến một dự án khác và biên dịch thành một exe. – nicholas

+0

Xem thêm: http://stackoverflow.com/questions/2016722/one-dll-multiple-projects – nicholas

+3

Tôi không thể quyết định câu hỏi này là hời hợt hay vô cùng sâu sắc. Có lẽ có một cái gì đó tôi đang mất tích vì tôi không quen thuộc với teraterm hoặc thực sự là lý do đằng sau gói một thực thi vào một DLL - thực thi và DLL phục vụ các mục đích khác nhau. Điều đó nói rằng, bạn có toàn quyền kiểm soát tất cả các DLL tham gia vào dự án không? Các tệp DLL được liên kết một cách rõ ràng (thông qua các tệp lib) hay chúng được gọi với 'LoadLibrary'? Để tạo một DLL đơn, bạn cần phải chuyển đổi chúng để sử dụng liên kết tĩnh. – paddy

Trả lời

0

Có thể có một sự bắt, nhưng đang ở trong VS2010, bạn chỉ cần nhấp vào dự án khởi động, chọn 'thuộc tính' -> 'thuộc tính cấu hình' -> 'chung' -> 'loại cấu hình' -> đặt để 'thư viện động (dll)'

+0

bạn có thể làm phong phú thêm câu trả lời của mình không? – 0x90

1

Visual Studio có một lựa chọn C++ mối liên kết gọi là "link Library Dependencies": http://msdn.microsoft.com/en-us/library/024awkd1(v=vs.90).aspx

này sẽ liên kết các tập tin đối tượng từ các dự án trong các giải pháp trực tiếp vào sản lượng dự án (thông qua theo dõi phụ thuộc). Hãy cẩn thận khi bạn sử dụng điều này mặc dù, nếu bạn sử dụng điều này trong một EXE và các DLL bạn đang liên kết các biểu tượng xuất khẩu EXE của bạn cũng sẽ xuất khẩu chúng.

Cập nhật:

Dưới đây là chi tiết: Điều gì sẽ xảy ra là thay vì nối DLL (điều này giả định bạn có DLL bạn muốn liên kết thiết lập như phụ thuộc của dự án của bạn trong dung dịch) để sản xuất các tệp nhị phân riêng biệt, trình liên kết lấy các kết quả đầu ra từ từng phụ thuộc của từng dự án riêng biệt và liên kết chúng vào tệp thực thi/DLL trực tiếp cuối cùng, do đó tạo ra một DLL nguyên khối.

Tác dụng phụ là (tùy thuộc vào mã) kích thước tổng thể của đầu ra giảm một chút, DLL nguyên khối (hoặc EXE) có thể lớn nói chung, nhưng kích thước nhỏ hơn so với tệp đầu ra kết hợp do để tối ưu hóa thời gian liên kết. Bất kỳ biểu tượng nào được xuất khẩu bởi các đối tượng được liên kết sẽ được xuất bởi DLL cuối cùng, vì chúng được đánh dấu như vậy trong bước biên dịch.

+0

Âm thanh như một giải pháp tốt, tôi đã thử nó nhiều lần trên Linux bằng cách sử dụng GCC, nó làm cho chương trình của bạn rất lớn, nhưng nó hoạt động. Tôi có nhớ điều gì không? nếu bạn có thể làm giàu câu trả lời của bạn và xác nhận khác đó là giải pháp tôi sẽ đánh dấu nó. 1 cảm ơn. – 0x90

+0

Xong, xin lỗi nếu nó có vẻ hơi mơ hồ trước đây, không ngủ nhiều và muốn trả lời nhanh trước khi đi ngủ. ** Chỉnh sửa: ** Tôi không khuyên bạn nên làm điều này trên Linux mặc dù nó có thể gây rối với các phụ thuộc và trừ khi bạn xây dựng lại nhị phân của mình trên mọi nền tảng có thể khó phân phối lại cho người dùng mà không gây ra vấn đề tiềm ẩn. Tất cả phụ thuộc vào loại thư viện mà bạn liên kết và dù chúng có mã nền tảng cụ thể hay không. – voodooattack

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