Repository 32bit  Forum
Repository 64bit  Wiki

[C/C++] variabile di ambiente porting tra sistemi diversi

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda smtux » mar mar 18, 2008 20:44

Salve,

volendo scrivere del codice C/C++ compilabile con facilità su macchine diverse quali sono le forme più corrette?
Codice: Seleziona tutto
#if defined (MINGW32)
...
#else
..
#endif


in pratica quello che voglio è scrivere del codice che poi se compilato su macchine linux, win32 o mac mi porti gli stessi risultati.

OT: mi sono espresso malissimo ma spero che mi capiate lo stesso... un po' di stanchezza ;)
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda ksniffer » mer mar 19, 2008 10:14

Che applicazione è? Grafica? Se si quali librerie vuoi usare? Perché alcune di essere definiscono delle costanti a seconda dell'ambiente in cui ti trovi. Certo puoi farlo pure da te ma non saprei come si fa praticamente.
Avatar utente
ksniffer
Linux 2.6
Linux 2.6
 
Messaggi: 540
Iscritto il: lun lug 30, 2007 12:18
Kernel: 2.6.34
Desktop: KDE 4.4.4
Distribuzione: ArchLinux

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda 414N » mer mar 19, 2008 13:24

Come detto da ksniffer, dipende tutto dal contesto dell'applicazione che vorresti sviluppare e dalle librerie alle quali ti appoggi.
Potrebbero servire direttive al preprocessore come quelle che hai riportato nel tuo post come potrebbero non essere necessarie.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda smtux » mer mar 19, 2008 13:30

no si tratta di un'applicazione console (quindi non grafica).

Però già che mi avete dato il "là" per scrivere un'applicazione portabile sarebe meglio usare le gtk(+), che dite? ed eventualmente in questo contesto ocme si applica la mia domanda?

grazie
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda ksniffer » mer mar 19, 2008 13:35

Se è una applicazione a linea di comando le gtk+ non ti servono. Se è una applicazione a riga di comando hai da scrivere molto codice per renderla compatibile per win/mac/nix ... beh dipende anche da che applicazione è. Se lo chiedi a me io ti dico di usare Qt4. Ho avuto a che fare con wxWidgets (un port C++ di gtk) per tornare a usare le comode e potenti Qt4. Qt ha anche il supporto per applicazioni solo testuali. Ma dipende sempre da che applicazione è. A domanda generica si risponde in modo generico.
Avatar utente
ksniffer
Linux 2.6
Linux 2.6
 
Messaggi: 540
Iscritto il: lun lug 30, 2007 12:18
Kernel: 2.6.34
Desktop: KDE 4.4.4
Distribuzione: ArchLinux

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda smtux » gio mar 20, 2008 9:00

non è che voglio rimanere sul generico ... la mia era una domanda interlocutoria.

Supponiamo che voglia creare un'applicazione console per trasmettere un input inviato da un utente tramite tastiera attraverso una seriale.
Questo programma lo vorrei scrivere compatibile per i diversi sistemi operativi ed eventualmente se sulla macchina win è installato mingw32 anche con lui.

che dici?
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda 414N » gio mar 20, 2008 15:33

smtux ha scritto:non è che voglio rimanere sul generico ... la mia era una domanda interlocutoria.

Supponiamo che voglia creare un'applicazione console per trasmettere un input inviato da un utente tramite tastiera attraverso una seriale.
Questo programma lo vorrei scrivere compatibile per i diversi sistemi operativi ed eventualmente se sulla macchina win è installato mingw32 anche con lui.

che dici?


Per me non hai ben chiara la situazione...

Andiamo per punti:
1) Input da tastiera. Scordati di cavartela con una banale getchar o scanf. Senza entrare nel merito di sistemi operativi differenti, le librerie dei compilatori le implementano in modo diverso a seconda del compilatore (gcc, mingw, turboc++, visual c++...). Percui dovresti studiarti i vari casi e creare delle macro dentro dei blocchi condizionali per il preprocessore (#ifdef...) che implementino la funzione che desideri appoggiandosi a ciò che è disponibile indipendentemente dall'ambiente di sviluppo.
2) Output su porta seriale. Stesso discorso della tastiera. In più, sistemi operativi diversi vincolano in modo diverso l'accesso alle periferiche. Mentre magari su Linux ti è possibile una scrittura diretta su una porta seriale (con una write magari), in Windows NT/2000/XP (Vista non lo so) non è possibile, perchè l'output diretto su periferiche è bloccato.
3) Visti i problemi 1 e 2, sarebbe il caso di cercare librerie già fatte che forniscano le funzioni richieste. Naturalmente, per compilare il programma su sistemi diversi, dovrai avere le librerie compilate per quel sistema (ovvero dipendenze in più)...
4) Ma devi proprio scrivere un programma portabile in C/C++? Non puoi usare Java, Python etc., che sono nati multipiattaforma apposta per non avere questi problemi?
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda Mario Vanoni » gio mar 20, 2008 16:45

Non mi e` chiaro quello che vuoi,
quindi ti segnalo la soluzione in ditta, che funziona da >20 anni.

- server, prima UNIX SVR2 poi SVR3, poi Linux 1.2 .... 2.4
- programmi sul server in C con curses(3X) prima, poi ncurses(3)
- utenti in ditta (RS-232) con schermi DEC VT510 alfanumerici
- utenti in ditta (RS-232) sotto M$ usano telnet per accedere
- utenti via internet sotto M$ usano putty per accedere
- utenti via internet sotto Linux usano ssh per accedere

L'accesso via internet deve passare una prima macchina,
con un "restrict" da un libro del 1985, _mai_ violato!
Poi in piu` la protezione di "denyhosts" che e` molto effettiva.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda robbybby » gio mar 20, 2008 22:07

Aggiungo la mia: gestione seriale Win$: from the scratch e' un delirio. Devi avere un thread per la lettura, e un aper la scrittura, con tutte le funzioni di sincronizzazione e varie attese passive implementate coi famigerati WaitForMultipleObjects() di Win$.
Io le ho implementate in un paio di miei programmi, ma dubito che lo stesso sistema sia solo lontanamente applicabile ad altri sistemi, senza grossissime modifiche.
Ergo: se puoi usare delle librerie che astraggono dall'hardware bene, altrimenti ogni sistema e' a se'.
Invece ho visto che e' piu' simile, tra Linux e Win$ l'accesso alle comunicazioni via rete (tcp, e udp). Tempo fa ho fatto una piccola demo su Linux (client/server che spedivano e ricevevano pacchetti udp), che ha richiesto pochissime modifiche per essere compilato (e funzionare) su Win$.
Avatar utente
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1172
Iscritto il: sab dic 16, 2006 10:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda smtux » ven mar 21, 2008 10:39

ok...
grazie a tutti mi sono più chiare un po' di cose.

Una domanda: esistono dei tutorial o cose simili che posso seguire per scrivere applicazioni cross-platform in c/c++.
Infatti avrei bisogno di trovare al volo le differenze di gestione delle prefieriche tra win32, winCE, linux tanto per cominciare.

Sicuramente una soluzione è usare linguaggi tipo: c#, java, python... ma non li conosco quindi :(!

grazie per i preziosi consigli.
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda 414N » ven mar 21, 2008 10:55

Qui qualcosina c'è: http://www.goingware.com/tips/getting-started/.
Datti una letta anche a Wikipedia: http://it.wikipedia.org/wiki/Multipiattaforma
smtux ha scritto:Infatti avrei bisogno di trovare al volo le differenze di gestione delle prefieriche tra win32, winCE, linux tanto per cominciare.


Allora ti vuoi proprio sporcare le mani :) Non che sia impossibile, ma lo trovo un tantino esagerato mettersi a scrivere del codice per gestire periferiche su più sistemi operativi / compilatori da zero quando qualcuno di sicuro lo ha già fatto per te. Cerca librerie multipiattaforma che permettano l'accesso alle periferiche astraendo dall'hardware.
smtux ha scritto:Sicuramente una soluzione è usare linguaggi tipo: c#, java, python... ma non li conosco quindi :(!

Se conosci il C++ allora non farai molta fatica ad imparare Java...
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda smtux » ven mar 21, 2008 12:35

grazie.

dove posso troavre librerire c/c++ mutlipiattaforma? Esistono dei repositori on line di questo tipo di librerie mgari con licenza gpl?

:D

EDIT: esempio un oggetto seriale c++ multipiattaforma
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda 414N » ven mar 21, 2008 13:28

Beh, di librerie multipiattaforma C++ ne esistono parecchie (GPL e non).
Te ne riporto alcune che conosco.
Librerie GUI:
Librerie per i giochi:
Varie utilità:
Esistono poi i binding di vari programmi/librerie per i vari linguaggi di programmazione, come ad esempio Magick++ (binding di ImageMagick per processare immagini): http://www.imagemagick.org/Magick++/.
Nel caso di I/O su seriale, con una rapida ricerca in Google ho trovato: http://code.google.com/p/mspccpp/, ma è un progetto di Google Code in fase di sviluppo.

Ricorda comunque che a volte è preferibile eseguire dei port piuttosto che scrivere sempre e solo codice multipiattaforma, specie se questo deve rendere illeggibile (e quindi poco mantenibile) il codice sorgente che scrivi.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda smtux » sab mar 22, 2008 15:29

414N ha scritto:Beh, di librerie multipiattaforma C++ ne esistono parecchie (GPL e non).
Te ne riporto alcune che conosco.
Librerie GUI:
Librerie per i giochi:
Varie utilità:
Esistono poi i binding di vari programmi/librerie per i vari linguaggi di programmazione, come ad esempio Magick++ (binding di ImageMagick per processare immagini): http://www.imagemagick.org/Magick++/.
Nel caso di I/O su seriale, con una rapida ricerca in Google ho trovato: http://code.google.com/p/mspccpp/, ma è un progetto di Google Code in fase di sviluppo.

Ricorda comunque che a volte è preferibile eseguire dei port piuttosto che scrivere sempre e solo codice multipiattaforma, specie se questo deve rendere illeggibile (e quindi poco mantenibile) il codice sorgente che scrivi.

grazie, ho un po' di materiale su cui riflettere ;)!
smtux
Linux 2.6
Linux 2.6
 
Messaggi: 977
Iscritto il: mer ago 31, 2005 23:00
Località: somewhere in the time
Slackware: 12.0

Re: [C/C++] variabile di ambiente porting tra sistemi diversi

Messaggioda 414N » sab mar 22, 2008 16:18

Di niente :)
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite