2012-03-30 29 views
5

Tôi lo lắng về độ tin cậy của trình biên dịch MinGW cho 64-bit, như là một thay thế cho trình biên dịch Visual C++. Ví dụ, giả sử mã C++ xây dựng và chạy hoàn toàn dưới Linux bằng GCC 4.6.2, MinGW tương ứng có tạo ra các thư viện/thư viện đáng tin cậy tương tự dưới Windows 64 bit không? Không.MinGW là trình biên dịch GCC 64 bit đáng tin cậy

Cygwin có phải là lựa chọn tốt hơn về độ tin cậy không? Không phải là trình biên dịch Visual C++?

+0

Trừ khi có lỗi trong phần dành riêng cho Windows của thư viện chuẩn và các thư viện khác, tôi cho rằng mã sẽ giống hệt nhau (ngoại trừ "quy ước gọi điện"). –

Trả lời

14

Thứ nhất, một số quan niệm sai lầm:

  1. MinGW (.org) không cung cấp một phiên bản 64-bit của thời gian chạy của nó. MinGW-w64, ngoài CRT 32 bit của chúng. Họ cũng đang làm việc hỗ trợ ARM. Và hỗ trợ các API bổ sung khác nhau (Win32 và các API khác).

  2. Cygwin < -> MinGW-w64: Cygwin không sử dụng MS CRT (msvcrt.dll). Thay vào đó, nó chèn một lớp tương thích POSIX vào giữa ứng dụng Cygwin của bạn và các thư viện hệ điều hành của hệ thống (kernel32.dll, ntdll.dll, vv), cụ thể là cygwin1.dll.

On cho câu hỏi sau đó ...

tôi đã tìm thấy các trình biên dịch MinGW-w64 rất tốt, và GCC 4.6 trở lên (trên thực tế, 4.5.1 trở lên) là rất có khả năng sản xuất tốt Mã 64 bit cho Windows. Hãy nhớ rằng MinGW cung cấp cơ bản cùng một API C như msvcrt.dll, vì vậy hãy truy cập msdn.com để xem tài liệu (và chắc chắn xem phiên bản tài liệu "MSVC++ 2003", một số chức năng khác với các thời gian chạy mới hơn), không nghĩ rằng vì nó là GCC, tài liệu glibc đột nhiên áp dụng cho Windows. Mã của bạn sẽ phải là nền tảng chéo. Cũng lưu ý rằng sizeof(long)!=sizeof(T*) trên x64 Windows. Một lỗi thường gặp khi chuyển mã * nix hoặc x86 Windows sang x64 Windows.

+1

Cảm ơn bạn đã làm rõ và chia sẻ kinh nghiệm của bạn với MinGW w/GCC 4.5.1+ – Nick

+0

Hiệu chỉnh: Cygwin không sử dụng msvcrt, nó cung cấp thời gian chạy C của riêng nó ở vị trí đó. Cập nhật: Cygwin hiện có phiên bản 64 bit. – Yaakov

+0

@Yaakov Bạn đúng. Đã cập nhật bài đăng. – rubenvb

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