2008-08-06 25 views
31

Tôi tự hỏi làm cách nào để tạo bản phát hành bao gồm tất cả các tệp dll cần thiết vào .exe để chương trình có thể chạy trên máy không phát triển mà không cần phải cài đặt lại microsoft redistributable trên máy mục tiêu.Làm thế nào để bạn đóng gói một dự án studio C++ trực quan để phát hành?

Nếu không thực hiện việc này, bạn nhận được thông báo lỗi rằng cấu hình ứng dụng không chính xác và phải cài đặt lại.

+0

Chỉ cần sử dụng Trình hướng dẫn cài đặt như Cài đặt Inno. Thiết lập Inno nói riêng thực sự dễ sử dụng nếu tất cả những gì bạn cần là đóng gói một loạt các tập tin. – sashoalm

Trả lời

17
  1. Chọn Project -> Properties
  2. Chọn Configuration -> General
  3. Trong hộp cho cách bạn nên liên kết MFC, chọn để tĩnh liên kết nó.
  4. Chọn Trình liên kết -> Phương thức nhập. Dưới Dependencies bổ sung, thêm bất kỳ thư viện bạn cần ứng dụng của bạn để liên kết tĩnh trong.
+3

Tôi có thể thiếu một cái gì đó (tôi không có gì của một chuyên gia) nhưng sau khi làm theo các bước của bạn tôi vẫn phải gói tất cả * dll * trong thư mục * exe *. Không phải là ý định của OP để có mọi thứ được đóng gói thành file * exe * sao? – Malabarba

+0

@BruceConnor.Liên kết các thư viện tĩnh bao gồm chúng vào tệp thi hành. Điều ngược lại được gọi là liên kết động, cho phép thực thi tìm kiếm thư viện 'dll's (= dunamic link) khi khởi động. – danijar

0

Bạn sẽ tìm cách để liên kết tĩnh (như trái ngược với động liên kết)

Tôi không chắc chắn có bao nhiêu MS redistributables tĩnh liên kết trong.

0

Nếu bạn đang tìm kiếm để tìm ra dll của máy mục tiêu của bạn là mất tích sau đó sử dụng depends.exe mà sử dụng để đi kèm với MSDev, nhưng cũng có thể được tìm thấy here. Kiểm tra điều này trên một vài máy mục tiêu sẽ cho bạn biết bạn cần gói dll nào với ứng dụng của bạn.

10

Bạn cần phải thiết lập các thư viện thời gian chạy (Theo C/C++ -> Code Generation) cho TẤT CẢ các dự án liên kết tĩnh, mà tương quan với các cấu hình xây dựng mặc định sau đây:

  • Multithreaded Debug/Thả
  • Gỡ lỗi/phát hành Singlethreaded

Trái ngược với phiên bản "DLL" của các thư viện đó.

Thậm chí nếu bạn làm điều đó, tùy thuộc vào thư viện bạn đang sử dụng, bạn có thể phải cài đặt Mô-đun hợp nhất/khung công tác/v.v. Nó phụ thuộc vào việc liệu các phiên bản LIB tĩnh của các phụ thuộc của bạn có sẵn hay không.

4

Hãy nhận biết rằng Microsoft do not recommend that you static link the runtime into your project, vì điều này ngăn không cho nó được phục vụ bởi các cửa sổ cập nhật để sửa lỗi bảo mật quan trọng. Ngoài ra còn có các vấn đề tiềm ẩn nếu bạn đang chuyển bộ nhớ giữa các tệp .exe và .dll chính của bạn như thể mỗi liên kết tĩnh này chạy trong thời gian chạy, bạn có thể kết thúc với các vấn đề không khớp/không phù hợp malloc/miễn phí.

Bạn có thể bao gồm các tệp DLL với tệp thực thi mà không biên dịch chúng thành tệp .exe và không chạy công cụ redist - đây là những gì tôi làm và có vẻ như hoạt động tốt.

Chỉ bay trong thuốc mỡ là bạn cần bao gồm các tệp hai lần nếu bạn phân phối cho nhiều phiên bản Windows - hệ điều hành mới hơn cần tệp trong thư mục được xác định rõ ràng và những tệp cũ hơn muốn tất cả tệp trong thư mục chương trình.

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