2017-02-02 43 views
5

Tôi hiện đang sử dụng Windows 8.1 và đang tìm cách cài đặt GCC. Tôi phát hiện ra rằng cách để làm điều này là thông qua MinGW và CygWin (phổ biến nhất). Bây giờ tôi đã đưa ra trên Windows Subsystem cho Linux (WSL) và Bash cung cấp trên Windows trong Windows 10GCC trên Windows - Bash trên Ubuntu trên Windows (WSL), CygWin, MinGW

Câu hỏi 1. cho dù đó có thể có GCC cài đặt thông qua Bash trong Windows 10, và sẽ nó hoạt động như trên bản phân phối Linux. Giả sử bạn có một tập tin 'helloworld.c', và nếu tôi làm,

>  gcc helloworld.c 
$  ./a 

trong bash tôi sẽ nhận được đầu ra (giả định các nội dung của 'helloworld.c' là rất đơn giản - một Statment cout.)

Câu hỏi 2. Nếu có thể thì phương pháp nào được ưu tiên sử dụng GCC trên Windows. Tức là, a) MinGW hoặc CygWin b) Bash trên Linux trên Windows. Bởi vì dựa trên những gì tôi hiểu về những gì tôi đọc, CygWin và MinGW gây ra một số phụ thuộc vào các chương trình được phát triển trên chúng.

Câu hỏi 3. Nếu bạn đã đọc phần này, hãy điền vào khoảng trống của tôi để hiểu về CygWin và MinGW. Đó là nếu tôi sử dụng nó chỉ để biên dịch và chạy các đoạn mã và không phải là phát triển ứng dụng, nó không quan trọng cái nào tôi sử dụng, tôi có đúng không? Bởi vì mã (được viết bằng C hoặc FORTRAN), sẽ biên dịch và thực thi cùng một hệ thống, tôi có đúng không?

Bối cảnh. Tôi là một sinh viên làm việc về tính toán số (Tính toán động lực học chất lỏng) và công việc chính của tôi là phát triển và chạy mã CFD trong FORTRAN. Những gì tôi muốn làm là làm việc trên mã tính toán (mà chúng tôi sử dụng FORTRAN chủ yếu) trên máy tính xách tay của tôi chạy trên Windows. Và tôi không tìm cách phát triển các ứng dụng hoặc phần mềm cho Windows hoặc Linux vào lúc này. Nhưng tôi vẫn muốn biết mọi thứ hoạt động như thế nào và đó là lựa chọn tốt nhất. Vui lòng giải thích chi tiết. Cảm ơn bạn.

Trả lời

3

Để trả lời câu hỏi đầu tiên của bạn, có, bạn có thể thực hiện việc biên dịch đó theo WSL.

Để trả lời các câu hỏi khác của bạn, hãy xem MinGW. Đây là mục nhập của Wikipedia cho MinGW nói:

MinGW được tách ra từ phiên bản 1.3.3 của Cygwin. [5] Mặc dù cả Cygwin và MinGW đều có thể được sử dụng để chuyển phần mềm Unix sang Windows, nhưng chúng có các cách tiếp cận khác nhau: [16] Cygwin nhằm mục đích cung cấp một lớp POSIX hoàn chỉnh bao gồm việc thực hiện đầy đủ tất cả các cuộc gọi và thư viện hệ thống Unix. Khả năng tương thích được coi là ưu tiên cao hơn hiệu suất. Mặt khác, ưu tiên của MinGW là sự đơn giản và hiệu suất. Như vậy, nó không cung cấp các API POSIX nhất định mà không thể dễ dàng được triển khai bằng API Windows, chẳng hạn như fork(), mmap() và ioctl(). [16] Các ứng dụng được viết bằng thư viện đa nền tảng đã được chuyển đến MinGW, chẳng hạn như SDL, wxWidgets, Qt hoặc GTK +, thường sẽ biên dịch dễ dàng trong MinGW giống như trong Cygwin.

Các chương trình Windows được viết bằng Cygwin chạy trên cùng khả năng tương thích copylefted DLL phải được phân phối cùng với chương trình, cùng với mã nguồn của chương trình. MinGW không yêu cầu một lớp tương thích, vì các chương trình dựa trên MinGW được biên dịch với các cuộc gọi trực tiếp đến các API của Windows.

(https://en.wikipedia.org/wiki/MinGW)

Đây là những gì trang web MinGW (http://www.mingw.org) nói:

MinGW, một sự co của "Minimalist GNU dành cho Windows", là một môi trường phát triển tối giản cho mẹ đẻ Các ứng dụng Microsoft Windows.

MinGW cung cấp bộ công cụ lập trình mã nguồn mở hoàn chỉnh phù hợp cho việc phát triển các ứng dụng MS-Windows gốc và không phụ thuộc vào bất kỳ DLL C-Runtime bên thứ ba nào. (Nó phụ thuộc vào một số DLL được cung cấp bởi Microsoft, như là các thành phần của hệ điều hành, đáng chú ý nhất trong số này là MSVCRT.DLL, thư viện thời gian chạy của Microsoft C. Ngoài ra, các ứng dụng luồng phải gửi với một DLL hỗ trợ phân tán tự do, được cung cấp như một phần của chính MinGW).

Trình biên dịch MinGW cung cấp quyền truy cập vào chức năng của thời gian chạy Microsoft C và một số thời gian chạy theo ngôn ngữ cụ thể. MinGW, là Minimalist, không, và sẽ không bao giờ, cố gắng cung cấp một môi trường chạy POSIX để triển khai ứng dụng POSIX trên MS-Windows. Nếu bạn muốn triển khai ứng dụng POSIX trên nền tảng này, hãy xem xét Cygwin để thay thế.

Tôi quen thuộc với WSL và Cygwin nhiều hơn MinGW. Từ những gì tôi biết, MinGW được nhắm mục tiêu nhiều hơn để sản xuất một cách hợp lý, hiệu năng cao Windows nhị phân trong khi Cygwin được nhắm mục tiêu nhiều hơn đến người dùng Unix (hoặc những người muốn ứng dụng cổng được viết cho Unix/POSIX). Windows với tất cả các trang trí. Như bạn đã chỉ ra, các chương trình Cygwin ít được sử dụng ít dễ dàng phân phối hơn cho những người không cài đặt Cygwin (do xem xét cấp phép, nhưng hãy xem liên kết bên dưới). Các chương trình MinGW chạy như các chương trình Windows nguyên gốc bằng cách sử dụng các thư viện gốc Windows không có giấy tờ. WSL nhị phân không chạy dưới Windows của mình; chúng chỉ chạy trong môi trường WSL (hoặc có thể là các hệ thống Linux gốc). WSL ánh xạ các cuộc gọi hạt nhân Linux đến các cuộc gọi hạt nhân Windows, trong khi Cygwin thực hiện các cuộc gọi thư viện Unix/Posix. WSL dựa vào một bản phân phối Linux thực sự để cung cấp môi trường của nó, trong khi Cygwin dựa vào môi trường riêng của nó. (WSL có một lợi thế ở chỗ nó sẽ chạy các tệp nhị phân hiện có mà không cần biên dịch lại.) Tôi không nghĩ rằng điều này quá quan trọng đối với bạn, bởi vì bạn không có kế hoạch phân phối các tệp nhị phân của mình. Bạn muốn có hiệu suất cao. Theo Wikipedia, MinGW có hiệu suất cao hơn Cygwin, nhưng nó cũng là 32-bit có thể là một vấn đề với các ứng dụng của bạn. Có một môi trường 64-bit tương tự như MinGW nhưng đó là một dự án khác.

Một lưu ý quan trọng là bạn có muốn viết mã Windows hoặc mã Unix/Linux/POSIX hay không. MinGW dành cho việc phát triển các ứng dụng Windows bằng cách sử dụng API Windows (mặc dù bạn có thể gấp trong một số hỗ trợ POSIX hạn chế); WSL và Cygwin là để phát triển các ứng dụng Unix/Linux/POSIX. Điều này quan trọng cho mục đích tính di động. Nhưng nếu bạn đang phát triển các loại chương trình tôi nghĩ bạn, gần như tất cả các tính toán thẳng và rất ít ưa thích I/O, nó chỉ có thể đun sôi xuống sở thích cá nhân hoặc thuận tiện. Nếu bạn có thể đến với một chương trình đại diện nhỏ mà mất một số lượng đáng kể thời gian và cố gắng chạy nó theo từng môi trường, bạn có thể tìm ra trong đó có hiệu suất tốt nhất. Điều đó sẽ phụ thuộc vào suy nghĩ của tôi về các hoạt động của riêng bạn.

Xem thêm What is the difference between Cygwin and MinGW?

+0

Cảm ơn câu trả lời toàn diện. Điều đó không chỉ trả lời các câu hỏi của tôi mà còn nâng cao hiểu biết của tôi về những công cụ này. Cảm ơn lời đề nghị là tốt. – Rithwik

+0

MinGW-w64 có nghĩa là người kế nhiệm phiên bản của MinGW.org. Chúng cung cấp các trình biên dịch 32 bit và 64 bit, cùng với một số hỗ trợ cánh tay. Chúng cung cấp mức độ phù hợp tốt hơn cho các API Windows hiện đại, bao gồm cả những thứ liên quan đến Windows App.Những gì tôi nói là chỉ cần sử dụng các toolchains dựa trên đó, đừng lãng phí thời gian với việc tìm ra lý do tại sao trình biên dịch MinGW của bạn không hoạt động do một số lý do bí ẩn. – rubenvb

+0

@rubenvb Haha. Tôi đã đi qua MinGW-w64, nhưng không chắc chắn về nó. Cảm ơn vì tiền hỗ trợ. – Rithwik

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