2013-01-04 42 views
9

Tôi không muốn biết liệu có một sự tương đương một-một giữa các hàm API trong các cửa sổ và Linux hay không, không muốn biết mọi chức năng API.Điều gì sẽ tương đương với Win32 API trong Linux?

Tôi chỉ muốn biết điều này vì hai điều cơ bản:

  1. Tôi muốn hiểu tại sao là Qt nền tảng độc lập
  2. Tôi muốn biết những gì API tôi nên sử dụng trong Linux để cổng một ứng dụng được lập trình với API Win32, hay nói cách khác, ở mức API Win32.

Tôi biết rằng điều này là không thực tế nhưng tôi muốn biết sự tương đương này.

+0

[Mainsoft] (http://www.mainsoft.com/content/mainsoft-unix-and-linux-overview) cung cấp một khả năng (mặc dù, ở mức giá nghiêm trọng). –

+3

Qt là một lớp trừu tượng. Nó có các triển khai cụ thể nền tảng ánh xạ các lệnh Qt đến hoạt động gốc cơ bản. Nó phụ thuộc vào đó gọi win32 api bạn muốn cổng. Một số cửa sổ như vậy cụ thể mà họ không có khả năng làm việc ở bất cứ nơi nào khác. – Chriseyre2000

+2

Win32 là một bộ các thư viện bán liên quan lớn cho mọi thứ từ các yếu tố GUI đến đồ họa 3D đến thao tác socket. Linux có nhiều mô đun hơn và bạn có thể muốn chọn và chọn một số thư viện để sử dụng trong việc chuyển dự án của mình. – meagar

Trả lời

11

Bạn cần hiểu những gì syscalls là. Trên Linux, chúng là API đất thấp nhất có thể user (ngược lại Win32 API có thể trộn các syscalls hạt nhân thực với một số hàm thư viện. libc cũng kết hợp trên Linux). fork(2), execve(2), open(2), pipe(2), mmap(2), read(2), poll(2), close(2), dup2(2), sigaction(2) là syscalls quan trọng (nhưng có khoảng 300 trong số họ).

Đừng mong đợi từng chức năng của cửa sổ khả dụng trên Linux (và ngược lại). Thậm chí không nghĩ như vậy tương đương. Nhận suy nghĩ khác về Linux. (Cụ thể, processes rất khác nhau trên Linux và trên Windows).

Đừng quên rằng Linux là phần mềm miễn phí và bạn có thể đi sâu vào mã nguồn của mọi chức năng bạn đang sử dụng trên Linux. Đọc nó, tìm kiếm, cải thiện nó .....

Đọc trang intro(2) trang đầu tiên và một số trang người đàn ông khác (đặc biệt là syscalls(2), intro(3) v.v ...). Đọc cũng ví dụ: Advanced Linux ProgrammingAdvanced Unix Programming.

Một số thư viện cố gắng đưa ra yếu tố và cung cấp sự trừu tượng chung cho cả Posix (ví dụ: Linux) và Windows. Cụ thể là Qt (và cũng là Gtk).

Nếu bạn quan tâm đến giao diện đồ họa, hãy hiểu vai trò quan trọng của X11 (lưu ý rằng máy chủ X11 gần nhất với màn hình bàn phím &; hầu hết các ứng dụng đồ họa là máy khách X11). Trong năm 2016, X11 có xu hướng bị thay thế bởi Wayland (nhưng bạn sẽ không nhận thấy rằng việc triển khai "chi tiết" - một thực tế lớn - nếu bạn mã chống lại Qt hoặc GTK)

Nếu bạn viết một ứng dụng chỉ sử dụng các cuộc gọi Qt (những người không được ghi nhận là đặc trưng cho Linux hoặc Windows) ngoài các hàm C++ chuẩn, nó phải là nguồn di động từ Linux sang Windows và ngược lại.

4

Nếu bạn muốn chuyển một ứng dụng sử dụng các cuộc gọi Win32, đặt cược tốt nhất của bạn có thể là sử dụng WineLib. Điều này sử dụng các thư viện làm cơ sở cho Wine, nhưng nó không giống như việc chạy một ứng dụng bằng Wine - bạn biên dịch lại ứng dụng của mình như một ứng dụng Linux, chỉ sử dụng các thư viện chia sẻ WineLib. Nó sẽ vẫn trông giống như một ứng dụng Windows, trừ khi bạn sửa đổi lớp UI.

Như đã nói ở đâu đó trong câu trả lời, không có tương đương trực tiếp thực với Win32 trong Linux - các bit khác nhau của Win32 được cung cấp bởi các thành phần khác nhau và đôi khi bạn có lựa chọn các thành phần. Điều này là có thể vì một số phần tương đương của các phần của Win32 được thực thi tự nhiên ở mức thấp hơn - ví dụ, Win32 cung cấp các thành phần giao diện người dùng, tương đương có sẵn trong GTK, Qt hoặc bất kỳ số bộ công cụ nào khác (như WineLib). tương tác với X. Cũng giống như bạn thường sử dụng các thành phần từ Win32 thay vì vẽ của riêng bạn bằng cách sử dụng các cuộc gọi API cấp thấp hơn, vì vậy bạn thường sử dụng các thành phần từ bộ công cụ giao diện người dùng cấp cao thay vì sử dụng X trực tiếp.

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