Windows và Linux là hai hệ thống hoàn toàn khác nhau, và do đó, việc chuyển đổi chương trình viết cho này sang kia thường không dễ dàng, đặc biệt khi xử lý chương trình GUI. Mặc dù có nhiều thư viện và SDK đa nền tảng, các chương trình gốc viết không có ý định chuyển đổi thì rất khó port.
Khi nói đến việc biên dịch và chạy chương trình Linux trên Windows, có giải pháp gọi là Cygwin. Dự án Cygwin là tập hợp các công cụ và trình biên dịch phổ biến nhất (bao gồm shell bash và chuỗi trình biên dịch GNU) cho Windows. Nó cũng bao gồm một thư viện cung cấp lớp tương thích để các chương trình gọi API riêng của Linux có thể được biên dịch. Cygwin không phải là trình giả lập hay máy ảo, và nó không cho phép chạy file nhị phân Linux trên Windows mà không cần biên dịch lại.
Truy cập trang cài đặt Cygwin và tải file thực thi setup 32-bit hoặc 64-bit (tùy biến thể Windows bạn dùng). Chạy chương trình setup. Nhấn Next và Next lần nữa (để Install from Internet). Thư mục mặc định là C:\cygwin. Có thể thay đổi nếu cần, nhưng trừ khi có lý do đặc biệt, mặc định là tốt nhất. Nhấn Next, Next và Next lần nữa.
Dự án Cygwin có các trang mirror trên khắp thế giới; chọn cái bạn nghĩ sẽ phục vụ vị trí của bạn tốt nhất và nhấn Next. Bây giờ bạn cần chọn gói cài đặt. Để biên dịch chương trình Linux đơn giản trên Windows, bạn cần Chuỗi trình biên dịch GNU (GCC) cung cấp trình biên dịch C và C++.
Gõ gcc vào ô tìm kiếm rồi nhấn vào dấu cộng nhỏ bên cạnh Devel trong danh sách gói. Tìm gcc-core và gcc-g++ rồi nhấn Skip cho từng cái. Từ Skip sẽ đổi thành số phiên bản và dấu n/a trong cột Bin? sẽ biến thành hộp tích. Gõ make vào ô tìm kiếm và tìm make dưới Devel. Nhấn Skip để đánh dấu cài đặt. Tìm wget và cũng đánh dấu cài từ Web. Để build ví dụ dưới đây, chúng ta cũng cần libiconv; tìm và đánh dấu cài.
Nhấn Next. Trình cài đặt sẽ kiểm tra các gói khác cần cài để giải quyết phụ thuộc. Nhấn Next để chấp nhận khuyến nghị.
Sau khi tất cả gói được tải và cài đặt, làm theo các bước cuối cho đến khi trình cài thoát. Khởi động Cygwin Terminal để nhập môi trường phát triển giống Linux. Trong terminal bạn không dùng lệnh Windows như dir mà dùng lệnh shell như ls.
Để minh họa cách biên dịch chương trình Linux trên Windows, chúng ta sẽ dùng gói HTML-XML từ W3. Để xem nó làm gì, xem bài How to Manipulate HTML and XML Files from the Command Line.
Tải file nguồn bằng wget:
wget https://www.w3.org/Tools/HTML-XML-utils/html-xml-utils-6.7.tar.gz
Giải nén file:
tar -zxf html-xml-utils-6.7.tar.gz
File nguồn hiện ở thư mục html-xml-utils-6.7. Vào thư mục đó:
cd html-xml-utils-6.7
Trước khi build, bạn cần chạy script shell configure để tạo Makefile (hướng dẫn build) phù hợp với môi trường build này. Đây là bước phổ biến trên Linux (và Cygwin) khi build package từ nguồn.
./configure
Sau khi configure xong, bắt đầu build bằng make:
make
Build sẽ fail ở giữa. Tôi lưỡng lự: hoặc chuyển sang project khác build từ nguồn, hay tiếp tục với HTML-XML-utils. Tôi chọn cái sau vì nó cho thấy không phải mọi thứ đều suôn sẻ khi biên dịch chương trình Linux dưới Cygwin. Giải pháp cho vấn đề này đơn giản. Thông báo lỗi cho thấy linker không tìm thấy thư viện iconv. Nhìn nhanh lệnh link thấy thư viện không được chỉ định. Giải pháp nhanh và bẩn là chạy lệnh thủ công và nói linker dùng libiconv. Cách chuẩn là đào sâu vào Makefile để tìm ra tại sao không hoạt động.
Chạy lệnh sau, lưu ý thêm -liconv ở cuối:
gcc -g -O2 -o hxindex.exe hxindex.o scan.o html.o openurl.o url.o heap.o class.o errexit.o connectsock.o types.o tree.o genid.o dtd.o headers.o dict.o fopencookie.o -liconv
Sau khi file hxindex.exe được build, tiếp tục phần còn lại bằng cách gõ make lại. Cách make hoạt động là kiểm tra cái đã và chưa build, rồi tiếp tục tại điểm thích hợp. Vì chúng ta đã build thủ công hxindex.exe, make chỉ tiếp tục với file nhị phân tiếp theo trong danh sách.
Khi make hoàn tất, bạn sẽ có tất cả file .exe trong thư mục html-xml-utils-6.7.
Nếu bị kẹt khi dùng Cygwin, hãy xem FAQ và tài liệu. Nếu không, dự án có mailing lists. Nếu có vấn đề với các bước trên, hãy dùng phần bình luận bên dưới.