31

Tôi biên dịch mã nguồn C++ của mình với Visual Studio 11 Developer Preview. Tôi liên kết tĩnh với thư viện thời gian chạy.Điều gì là đặc biệt về các tập tin thực thi được biên dịch với Visual Studio 11 mà kết quả là các tập tin thực thi không thể được thực hiện trên Windows XP?

Không thể thực thi kết quả trên Windows XP. Khi tôi cố gắng thực thi nó trên Windows XP, tôi nhận được thông báo lỗi "[Đường dẫn thực thi] không phải là một ứng dụng Win32 hợp lệ."

According to Microsoft Visual Studio 11 sẽ không hỗ trợ Windows XP.

Làm thế nào để nó hoạt động mà không thể thực thi kết quả trên Windows XP? Có điều gì đặc biệt trong phạm vi thực thi không?

+0

Những loại dự án bạn sử dụng trong VS2011 cho ứng dụng của bạn? – deepmax

+0

Tôi sử dụng Dự án Win32 và tạo một Ứng dụng Win32. –

+1

Đây là ứng dụng 32 bit.Kết quả của dumpbin là: Dump file [Đường dẫn] File Type: thực thi IMAGE Tóm tắt 3000 .data 3000 .rdata 2000 .reloc 1000 .rsrc 6000 .text –

Trả lời

20

Chúng dường như thả hỗ trợ cho các hệ thống cũ trong mỗi phiên bản mới của VS (NT4,2000, XP) Ngay cả khi bạn không sử dụng CRT, chúng vẫn buộc phiên bản hệ thống con PE có số cao. Bạn có thể làm việc xung quanh điều đó bằng cách changing the numbers back đến 5.0 trong bước xây dựng bài đăng. Chỉ cần thay đổi những con số đó sẽ cho phép exe bắt đầu trên XP trừ khi CRT mới đang sử dụng các hàm WinAPI không tồn tại trên XP.

Các lựa chọn khác nếu bạn muốn tiếp tục sử dụng VS11 là sử dụng đa mục tiêu và trình biên dịch cũ ...

+4

Tôi cho bạn thấy những chức năng nào bị thiếu (đối với cả CRT và MFC) và làm thế nào để làm việc xung quanh thực tế là các chức năng này đang thiếu trên XP tại bài đăng blog này: http://tedwvc.wordpress.com/2012/03/11/how-to-get-visual-c-2012-vc -11-beta-tĩnh-liên kết-crt-và-mfc-ứng dụng-to-run-on-windows-xp/ –

8

Visual Studio 2012 sẽ có thể nhắm mục tiêu Windows XP sau năm 2012:

Targeting Windows XP with C++ in Visual Studio 2012

"Cuối mùa thu này, Microsoft sẽ cung cấp bản cập nhật cho Visual Studio 2012 sẽ cho phép các ứng dụng C++ nhắm mục tiêu Windows XP. Bản cập nhật này sẽ thực hiện các sửa đổi cần thiết cho trình biên dịch, thời gian chạy và thư viện của Visual C++ 2012 tạo ứng dụng và DLL chạy trên Windows XP và các phiên bản cao hơn cũng như Windows Server 2003 trở lên. "

Sửa: Điều này đã xảy ra (phew!)

1

Các thư viện runtime kèm với VS 2010 và cao hơn thực thi của bạn thực thi để nhập hai chức năng mới từ kernel32.dll đang thiếu trên Windows XP: EncodePointerDecodePointer. Đó là cần thiết cho một số khác idiotic nỗ lực ngây thơ để nâng cao phần mềm "bảo mật".

Trong VS 2010 có một tùy chọn để sử dụng thư viện thời gian chạy của Visual Studio 2008, giải quyết vấn đề này. Tôi không biết nếu có một lựa chọn như vậy trong các phiên bản sau của VS.

+0

Đây là một trong những lý do. Nhưng nó không phải là người duy nhất. –

4

Cách giải quyết khác là sử dụng Platform Toolset khác, sẽ liên kết một phiên bản CRT khác và tạo các tệp nhị phân tương thích với các hệ điều hành cũ hơn.

Xem thêm tại đây: Target Windows XP in Visual Studio 11 Beta using the Visual Studio 2010 compiler and libraries.

Với v90 công cụ nhị phân của bạn sẽ có thể chạy ngay cả trong các hệ thống lớn hơn, chẳng hạn như Windows 2000.

http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png

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