Cross development windows,linux

di il
9 risposte

Cross development windows,linux

Ciao a tutti sono un programmatore c# e per un nuovo progetto vorrei imparare c++
il progetto sarà poi eseguito sia su Windows che su Linux, probabilmente anche su raspberry

googolando ho trovato parecchie informazioni ma preferirei la conferma di chi già sviluppa in entrambi gli ambienti.
in windows ovviamente userei visual studio e visual c++

se c'è qual'è la soluzione migliore per avere un codice quasi unico che possa essere compilato su tutte e due gli os
il progetto che vorrei utilizzare è un media player molto semplice.

ultima domanda quale ide utilizzare per linux ?
Grazie a tutti per i suggerimenti

Ciao.

9 Risposte

  • Re: Cross development windows,linux

    È un proposito titanico, a dir poco.
    e pure pochissimo portabile, ma proprio poco.
    non c'è un modo "semplice" per fare programmi del genere, ancor meno complessi come quello che ti proponi di fare.
    anche solo gestire i nomi dei file è una fatica improba, ci vogliono "pezzi" diversi per ogni sistema operativo.

    qualcosa del genere
    
    #ifndef unix
    string wtou(const wchar_t* s) {
      assert(sizeof(wchar_t)==2);  // Not true in Linux
      assert((wchar_t)(-1)==65535);
      string r;
      if (!s) return r;
      for (; *s; ++s) {
        if (*s=='\\') r+='/';
        else if (*s<128) r+=*s;
        else if (*s<2048) r+=192+*s/64, r+=128+*s%64;
        else r+=224+*s/4096, r+=128+*s/64%64, r+=128+*s%64;
      }
      return r;
    }
    
    // In Windows, convert UTF-8 string to wide string ignoring
    // invalid UTF-8 or >64K. Convert "/" to slash (default "\").
    std::wstring utow(const char* ss, char slash='\\') {
      assert(sizeof(wchar_t)==2);
      assert((wchar_t)(-1)==65535);
      std::wstring r;
      if (!ss) return r;
      const unsigned char* s=(const unsigned char*)ss;
      for (; s && *s; ++s) {
        if (s[0]=='/') r+=slash;
        else if (s[0]<128) r+=s[0];
        else if (s[0]>=192 && s[0]<224 && s[1]>=128 && s[1]<192)
          r+=(s[0]-192)*64+s[1]-128, ++s;
        else if (s[0]>=224 && s[0]<240 && s[1]>=128 && s[1]<192
                 && s[2]>=128 && s[2]<192)
          r+=(s[0]-224)*4096+(s[1]-128)*64+s[2]-128, s+=2;
      }
      return r;
    }
    #endif
    
  • Re: Cross development windows,linux

    Non e' facile, ma non e' impossibile.

    L'approccio piu' ragionevole e' quello di avere una piattaforma di riferimento, diciamo Linux, e usare Cygwin (NON MinGW) su Windows.

    Quindi usare lo STESSO tipo di compilatore: GNU C/C++
    Ed usare per quanto possibile STL e BOOST.
    Per la parte GUI, ti tocca usare Qt, disponibile su molte le piattaforme.

    Infine, usare un tool per il build comune/multipiattaforma, ad esempio CMake.
    Si potrebbero utilizzare anche gli "autotools" GNU, ma sono decisamente piu' complcati da usare.

    Questa e' la parte organizzativa.

    La parte complicata consiste nell'identificare le parti che dipendono dal sistema operativo, isolarle e farne un'implementazione che fornisca un'interfaccia comune su tutti i SO.

    Per essere sicuro che lo sviluppo procede correttamente, devi sviluppare su una piattaforma, e controllare se funziona ALMENO su un'altra.
    Ad esempio sviluppi su Windows e testi su Linux.
    Per il test, ti basta anche una virtual machine, tanto devi solo compilare ed eseguire saltuariamente.

    Di rogne rignose ne troverai in quantita', anche perche' NON ESISTE in Windows un ambiente PERFETTAMENTE compatibile con Linux.

    Ora Windows 10 mette a disposizione una serie di tool che sono disponibili in Linux, ma non ho idea di quanto tale sottosistema sia COMPATIBILE con Linux (anche se e' realizzato in collaborazione con Canonical, gli stessi di Ubuntu)
  • Re: Cross development windows,linux

    Avevo visto anch'io le qt mi sono sembrate le più professionali ed utilizzate peccato che sono un pò costose

    nell'attesa di ulteriori suggerimenti vi ringrazio e condivido i risultati delle mie ricerche

    https://juce.com
    consigliato da un amico che ci lavora professionalmente dice di non aver problemi a compilare in entrambi gli ambienti

    l'ho scaricato c'è voluta una mezza giornata per configurare sotto linux ho compilato gli esempi sotto linux
    devo fare ancora un test in windows


    http://openframeworks.cc
    non l'ho ancor scaricato dalla documentazione sembra ok

    Grazie e vi aggiorno
  • Re: Cross development windows,linux

    Le Qt sono gratuite se usi la versione Open Source, però poi sei obbligato a distribuire il tuo progetto sotto la licenza GPLv3. Sono anche prive di parecchie librerie particolari. Alla pagina ci sono tutti i riferimenti.

    Se poi non gradisci Qt, c'è anche , che può essere usata anche a livello commerciale.
  • Re: Cross development windows,linux

    Grazie, tu hai esperienza di cross compiling con vs e c++ , in Linux quale ide e compilatore mi consigli ?
  • Re: Cross development windows,linux

    alessandroz ha scritto:


    Grazie, tu hai esperienza di cross compiling con vs e c++ , in Linux quale ide e compilatore mi consigli ?
    Non ti ancora chiaro:

    NON TI CONVIENE usare DUE TIPI DIVERSI DI COMPILATORI C++

    (perche' il compilatore della Microsoft NON E' lo stesso che usi per Linux, per tutta una serie di motivi compilcati che non centrano niente con il fatto che uno e' per Windows e l'altro per Linux)

    A MENO DI NON ESSERE DECISAMENTE ESPERTO!

    Cioe' saper come ovviare alle incompatibilita'

    - TRA I COMPILATORI,
    - TRA LE LIBRERIE
    - oltre che TRA I SISTEMI OPERATIVI

    Questo vuol dire, ad esempio:

    - STESSO IDE per ENTRAMBI gli ambienti
    - STESSO COMPILATORE per ENTRAMBI gli ambienti

    In alternativa, auguri
  • Re: Cross development windows,linux

    Scusa mi sono spiegato male utilizzo visual studio con vc++ e faccio quello che mi serve lo stesso programma devo farlo girare sotto Linux

    ho capito che devo rifare la gui usando le qt ok
    poi...
    che ide e compilatore uso quando porto il tutto sotto Linux ? (cercando di mantenere il codice il più uniforme possibile )
    grazie
  • Re: Cross development windows,linux

    alessandroz ha scritto:


    Scusa mi sono spiegato male utilizzo visual studio con vc++ e faccio quello che mi serve lo stesso programma devo farlo girare sotto Linux

    ho capito che devo rifare la gui usando le qt ok
    poi...
    che ide e compilatore uso quando porto il tutto sotto Linux ? (cercando di mantenere il codice il più uniforme possibile )
    grazie
    Secondo me in Windows ti conviene usare Qt Creator come IDE, se pensi di usare le Qt, e dirgli di usare MSVC++ come compilatore (e qmake come make tool). Poi il progetto lo esporti e lo reimporti in Linux, sempre con Qt Creator (per Linux, stavolta), dove probabilmente dovrai riconfigurare il progetto per g++, a meno di non trovare in Windows un compilatore che generi codice multi-piattaforma. Vedi .
    Nella documentazione di Qt ci sono diverse sezioni dedicate alla compilazione multi-piattaforma.

    Qui http://doc.qt.io/qtcreator/creator-building-targets.html ti spiega come usare il tool per il multi-platform.
  • Re: Cross development windows,linux

    Bene grazie, questo weekend provo poi vi aggiorno.
Devi accedere o registrarti per scrivere nel forum
9 risposte