PDA

View Full Version : [visual C++]compilabilità del codice con altri OS se..


pier4reich
03-01-2010, 09:00
Ho provato a cercare un forum relativo a visual c++ (anche in inglese) ma non ho utilizzato la stringa giusta, evidentemente.

La mia domanda è questa:
Se programmo in visual c++ (in visual studio) ed il mio codice non utilizza nessuna chiamata alle librerie c++ (eccetto quella standard) disponibili con visual studio, dovrebbe essere possibile compilarlo anche in altri sistemi operativi (sia windows datati/futuri che non-windows).

Se invece nel codice utilizzo chiamate alle librerie messe a disposizione con visual studio, rimango legato a windows oppure riesco a compilare il codice (senza modifiche) anche in altri SO?

Ad "occhio" essendo le librerie messe a disposizione dalla MS non 'open' ritengo che siano legate ad una particolare versione di win (su cui gira quella data versione di visual studio), però potrei sbagliarmi.

Tutto questo senza utilizzare librerie esterne tipo boost o ptlib.

Grazie delle risposte!

Teo@Unix
03-01-2010, 10:16
Le API di windows sicuramente non ti permettono di ricompilare lo stesso codice sotto altri tipi di architetture. Ad esempio linux.

Non dovresti aver problemi invece sotto altre versioni di windows.

A questo problema vi sono passato da poco anche io, per risolvere dovresti utilizzare librerie indipendenti dal SO. (ve ne sono alcune, in questo forum mi hanno consigliato le Qt (http://doc.qt.nokia.com/4.6/index.html), e mi ci trovo bene per ora.

Se però nel tuo programma non le usi pesantemente dovrebbe esserti sufficiente utilizzare li direttive del pre-processore per includere gli header in modo dipendente dal s.o. in cui ti trovi, ad esempio:

#if WIN32
#include <winsock2.h>
#else /* UNIX */
#include <netdb.h>
#endif

Per esempio, molte funzioni delle API si trovano anche su Linux.

pier4reich
03-01-2010, 10:33
Ti ringrazio ma io non sto parlando solo delle win32 API, io sto parlano delle librerie messe a disposizione con visual studio (tranne la standard). Effettivamente non so se queste librerie si basano, successivamente, sulle api di win.
Librerie come la MFC, ATL, etc... (queste per capirci http://msdn.microsoft.com/it-it/library/52cs05fz.aspx) tutte fornite con visual studio.

zakmckraken
03-01-2010, 11:08
Purtroppo (o per fortuna) MFC etc sono solo per windows (MFC per esempio e'un wrapper a oggetti delle API win32)...dovresti usare qualcosa di portabile tipo Qt

pier4reich
03-01-2010, 11:37
Ok, quindi rimarrei legato con el varie librerie di visual studio. Grazie mille!

cionci
04-01-2010, 14:08
Se per te questo è un problema prova QtCreator. E' un IDE che permette di creare interfacce con le librerie Qt. Si trova incluso nel Qt SDK.
Se non fai uso di API del sistema operativo, puoi creare codice al 100% portabile fra vari sistemi operativi.

pier4reich
05-01-2010, 09:41
Principalmente l'ho chiesto perchè, per esempio, emule è in C++ ma è legato a windows. Siccome usa praticamente tutte le librerie citate precedentemente mi chiedevo se fosse portabile (come aMule) allorquando avessi tolto le chiamate dirette alle api (che si fanno tramite la windows.h).

Invece come sospettavo ogni libreria di visual studio è legata a win (tranne la standard) quindi nulla.
Si leggendo in giro ho visto che ci sono le qt, le boost o le ptlib. Thanks!

cionci
05-01-2010, 09:46
aMule è praticamente il porting di eMule.
In ogni caso i problemi di portabilità se non troppo grandi si possono aggirare come ha scritto Teo@Unix sopra.