2013-01-04 20 views
9

Non voglio sapere se esiste un'equivalenza uno-a-uno tra le funzioni API in windows e linux, né vogliamo conoscere ogni funzione API.Quale sarebbe l'equivalente dell'API Win32 in linux?

Voglio solo sapere questo per due cose fondamentali:

  1. voglio capire il motivo per cui è la piattaforma Qt indipendente
  2. Voglio sapere cosa API dovrei usare in Linux per il porting di un'applicazione programmata con l'API Win32 o, in altre parole, a livello di API Win32.

So che questo non è pratico ma voglio conoscere questa equivalenza.

+0

[Mainsoft] (http://www.mainsoft.com/content/mainsoft-unix-and-linux-overview) offre una possibilità (anche se a un prezzo serio). –

+3

Qt è un livello di astrazione. Ha implementazioni specifiche della piattaforma che mappano i comandi Qt all'operazione nativa sottostante. Dipende da quale win32 API si desidera effettuare il porting. Alcuni sono così specifici di Windows che è improbabile che possano funzionare altrove. – Chriseyre2000

+2

Win32 è un'enorme suite di librerie semi-correlate per tutto, dagli elementi della GUI alla grafica 3D alla manipolazione del socket. Linux è molto più modulare e probabilmente vorrai scegliere e scegliere diverse librerie da utilizzare nel porting del tuo progetto. – meagar

risposta

11

È necessario capire che cosa sono syscalls. Su Linux, sono l'API di terra user più bassa possibile (al contrario, Win32 API probabilmente mischia le reali syscalls del kernel con alcune funzioni di librerie.libc fa anche questo mix su Linux). fork(2), execve(2), open(2), pipe(2), mmap(2), read(2), poll(2), close(2), dup2(2), sigaction(2) sono chiamate di sistema importanti (ma ci sono circa 300 di loro).

Non aspettatevi che ogni funzionalità di Windows sia disponibile su Linux (e viceversa). Non pensare nemmeno a un simile equivalente. Ottieni una mentalità diversa su Linux. (In particolare, processes sono molto diversi su Linux e su Windows).

Non dimenticare che Linux è il software gratuito e puoi immergerti nel codice sorgente di ogni funzione che stai utilizzando su Linux. Leggi, cerca, migliora ...

Leggi prima la pagina man intro(2) e diverse altre pagine man (in particolare syscalls(2), intro(3) ecc ...). Leggi anche per es. Advanced Linux Programming e Advanced Unix Programming.

Alcune librerie cercano di calcolare e fornire un'astrazione comune per Posix (ad es. Linux) e Windows. In particolare Qt (e anche Gtk).

Se si è interessati all'interfaccia grafica, comprendere l'importante ruolo di X11 (notare che il server X11 è più vicino alla tastiera dello schermo &, la maggior parte delle applicazioni grafiche sono client X11). Nel 2016, X11 tende ad essere sostituito da Wayland (ma non si noterà quell'implementazione "dettaglio" - molto importante - se si codifica con Qt o GTK)

Se si scrive un'applicazione utilizzando solo chiamate Qt (quelli non documentati come specifici per Linux o Windows) oltre alle funzioni standard di C++, dovrebbe essere fonte portatile da Linux a Windows e viceversa.

4

Se si desidera eseguire il porting di un'applicazione che utilizza le chiamate Win32, la soluzione migliore potrebbe essere quella di utilizzare WineLib. Questo utilizza le librerie su cui si basa Wine, ma non è come avviare un'applicazione usando Wine - ricompilate la vostra applicazione come applicazione Linux, usando solo le librerie condivise di WineLib. Tuttavia, sembrerà comunque un'applicazione Windows, a meno che non si modifichi il livello dell'interfaccia utente.

Come è stato detto altrove nelle risposte, non esiste un vero equivalente diretto a Win32 in Linux: diversi bit di Win32 sono forniti da componenti diversi, ea volte si ha una scelta di componenti. Ciò è possibile perché alcuni equivalenti di parti di Win32 sono implementati in modo nativo a un livello inferiore - ad esempio, Win32 fornisce componenti dell'interfaccia utente, equivalenti a quelli disponibili in GTK, Qt o in un numero qualsiasi di altri toolkit (come WineLib), che a loro volta interagire con X. Proprio come di solito si usano componenti di Win32 piuttosto che disegnare i propri utilizzando le chiamate API di livello inferiore, quindi normalmente si usano componenti dal proprio toolkit di alto livello dell'interfaccia utente piuttosto che usare X direttamente.

Problemi correlati