Domanda

Per un prossimo progetto, ci sono piani per il porting del codice C ++ esistente che viene compilato su Windows e Linux su MacOS (leopard). Il software è un'applicazione da riga di comando, ma potrebbe essere pianificato un front-end della GUI. MacOS utilizza il compilatore g ++. Avendo lo stesso compilatore di Linux, non sembra che ci siano problemi, ma ci sono sempre.

Ci sono consigli o problemi a cui prestare attenzione durante il porto?

È stato utile?

Soluzione

La tua app ha una GUI e quale (nativa / Qt / Gtk +)?

In caso contrario, i problemi a cui prestare attenzione (rispetto a Linux) sono principalmente nell'area del collegamento dinamico. OS X usa '-dylib' e '-bundle' e in effetti ha due tipi di librerie dinamiche (runtime caricabili e quelle normali). Linux ha solo un tipo (-shared), ed è comunque più libero su questo.

Se la tua app ha una GUI, dovrai ricodificare il tutto in Cocoa, usando Objective-C. Ciò significa che sarai anche in una nuova lingua . Alcune persone (come la SM) hanno usato Carbon (API C ++), ma è stato gradualmente eliminato. Non lo consiglierei a nuovi progetti.

La tua migliore fortuna è usare Qt o Gtk +. Una porta nativa Gtk + è stata (ri) annunciata solo alcuni giorni fa (vedi Imendio ). / p>

P.S. Ovviamente OS X esegue anche binari X11, ma spingerlo verso uno dei tuoi clienti potrebbe essere una strada difficile. Sono abituati all'interfaccia di Aqua e produttivi con questo. Considera X11 solo una soluzione a brevissimo termine.

p.p.s. Il numero di librerie di componenti aggiuntivi open source fornite con OS X è limitato e le loro versioni potrebbero non essere disponibili. Mentre in Linux puoi facilmente richiedere agli utenti di avere installato 'libxxx v.y.y', in OS X ci sono diversi approcci di packaging (fink, macports) e per uno strumento commerciale ci si aspetta che le librerie richieste siano contenute nell'applicazione. OS X offre "bundle di applicazioni" e "framework" per questo (copie locali, rendendo l'applicazione autosufficiente). Linux non ha un tale concetto. Ciò avrà un grande effetto anche sul tuo sistema di compilazione; forse vorrai provare qualcosa come SCons per tutte le piattaforme?

Altri suggerimenti

Non è necessario ricodificare tutto in Objective-C. C'è una strana bastardizzazione di C ++ e Objective-C che ti permetterà di usare il codice C ++ da Objective-C, in modo da poter dividere in modo intelligente il codice del modello in C ++ e visualizzare / codice del controller in Objective-C. Per usare Objective-C, basta aggiungere i file di codice sorgente con .mm anziché .m e puoi mescolare la maggior parte delle sintassi C ++ e Objective-C legali anche sulla stessa riga.

Non abbiamo effettuato il porting su MacOS, ma abbiamo effettuato il porting su vari Unix da Linux, l'area di lavoro principale è stata l'installazione e i sistemi di avvio, quindi aspettati di portare la maggior parte del lavoro lì (dato che il tuo esistente è già portatile tra Linux e Windows).

Macintosh (macosx) è essenzialmente FreeBSD sotto il cofano (anche se è stato ottimizzato). Ci sono alcune differenze nella programmazione dei sistemi tra Linux e FreeBSD. Soprattutto queste differenze esistono tra le varie chiamate di sistema ... quindi quanto questo ti influenza sarà determinato da ciò che l'applicazione sta facendo e dal tipo di chiamate del sistema operativo che stai effettuando durante l'esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top