2010-04-05 38 views
6

Tôi đang chạy Windows 7 và Visual Studio 2008 Pro và cố gắng để ứng dụng của tôi hoạt động trên Windows XP SP3.Làm cách nào để biên dịch cho Windows XP trong windows 7/visual studio 2008

Đó là một chương trình dòng lệnh thực sự tối thiểu như vậy nên có bất kỳ phụ thuộc lố bịch:

// XPBuild.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    printf("Hello world"); 
    getchar(); 
    return 0; 
} 

Tôi đọc ở đâu đó rằng defining several constants such as WINVER nên cho phép tôi để biên dịch cho các nền tảng khác. Tôi đã thử các bổ sung như sau để /D tùy chọn trình biên dịch của tôi:

;WINVER=0x0501;_WIN32_WINNT 0x0501;NTDDI_VERSION=NTDDI_WINXP 

Nhưng điều đó đã có sự khác biệt. Khi tôi chạy nó trên máy tính Windows XP của tôi (thực sự đang chạy trong một virtualbox) tôi nhận được lỗi sau:

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

Vậy điều gì đã tôi đã bỏ lỡ? Có điều gì khác cần thiết để chạy các chương trình được biên dịch MSVC hay một tùy chọn trình biên dịch khác hay một cái gì đó khác?

+0

Đối với giá trị của nó, ứng dụng tiêu chuẩn nhỏ nhất là 'int main() {}', nếu bạn muốn dùng thử. Đối với một cái gì đó sử dụng thư viện chuẩn, có thể: '#include int main() {std :: cout << std :: endl;}' – GManNickG

+0

Vâng, nhưng tôi muốn cái gì đó nhổ ra một số đầu ra và tạm dừng trước khi biến mất. –

+0

Đối với giá trị của nó, ứng dụng * tiêu chuẩn nhỏ nhất * là int main() {return 0;} – gregschlom

Trả lời

10

Những gì bạn đã bỏ lỡ rất có thể là chương trình VC++ yêu cầu thời gian chạy được cài đặt (trừ khi bạn liên kết tĩnh, không phải mặc định) - thông báo lỗi bạn hiển thị chính xác là bạn nhận được gọi món.

Thử cài đặt Microsoft Visual C++ 2008 SP1 Redistributable Pack trên máy XP - rất có thể bạn sẽ thấy chương trình của mình hoạt động mà không có thay đổi gì.

+1

Ngoài ra, tùy chọn để thay đổi thành thời gian chạy được liên kết tĩnh có thể hoạt động tốt. –

+1

Hoặc, cách khác, biên dịch với các thư viện thời gian chạy tĩnh: đi đến "Thuộc tính dự án -> C/C++ -> Tạo mã -> Thư viện thời gian chạy" và chọn tùy chọn không có "DLL" trong tên. –

+0

Đã chấp nhận: Điều đó thật hoàn hảo. –

3

Câu trả lời của Michael giải thích lý do tại sao nó không phù hợp với bạn và bạn nên làm gì với nó. Đối với WINVER - chúng không thay đổi bất cứ điều gì về nhị phân của bạn theo nghĩa là nó đột nhiên sẽ bắt đầu hoạt động trên XP. Những gì họ làm là tắt các khai báo hàm và kiểu trong các tệp tiêu đề Windows không được hỗ trợ trên phiên bản hệ điều hành được chỉ định bởi WINVER. Điều này đảm bảo rằng bạn không vô tình gọi điện, ví dụ: một số chức năng chỉ dành cho Vista. Tuy nhiên, bạn không hoàn toàn cần - nếu mã của bạn không dựa trên bất kỳ chức năng chỉ có Vista/7 nào, bạn có thể biên dịch mà không cần định nghĩa lại WINVER và nó vẫn hoạt động tốt trên XP.

3

Chỉ cần đặt trình biên dịch sử dụng liên kết tĩnh trong cài đặt dự án (Project -> Properties -> Config Properties -> C/C++ -> Code Generation -> Thay đổi "Runtime Library" thành/MT hoặc/MTd thay vì mặc định/MD hoặc/MDd)

+0

Hoạt động hoàn hảo cho tôi! – Dibsyhex

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