Oppure

Loading
02/10/16 16:08
a_butta
Ciao a tutti.
Premetto che per molti questo quesito è banale, ma per me non lo è affatto. Mi sono trovato a scontrarmi con dei concetti base della programmazione che mi sono reso conto di non avere.

Sto cercando di sviluppare delle applicazioni in C++ e vorrei usare wxWidget per la GUI (possibilmente cross-platform). Come IDE vorrei utilizzare Eclipse (Neon).
Ho scaricato wxWidget e scompattato la zip. E qui arriva il problema: Non so come compilare i file per ottenere le effettive librerie da utilizzare poi nel programma principale (per ora mi accontento anche di una semplice finestra HelloWorld!)

Ho cercato parecchie guide su Internet, ma purtroppo questi passi base li danno per scontati. Forse sono io che non riesco a trovare una guida base per la compilazione.
Vi chiedo gentilmente se potete indirizzarmi verso una spiegazione dettagliata su come effettuare questa compilazione.

Vi ringrazio anticipatamente e chiedo perdono per l'effettiva banalità della mia domanda.
Ultima modifica effettuata da a_butta 02/10/16 16:10
aaa
02/10/16 16:10
lumo
Guarda se dentro la cartella trovi un file README o INSTALL, di solito lì ci sono le istruzioni per la compilazione.
aaa
02/10/16 16:16
a_butta
Postato originariamente da lumo:

Guarda se dentro la cartella trovi un file README o INSTALL, di solito lì ci sono le istruzioni per la compilazione.


C'è un file install-sh, di sequito linkato:
pastebin.com/…

Tuttavia non mi sembra affatto fornire delle spiegazioni..
aaa
02/10/16 17:14
lumo
No no, quello è lo script di installazione per sistemi UNIX.
Comunque è importante che ci dici che compilatore usi insieme a Eclipse, MinGW o Microsoft VSC?
aaa
02/10/16 17:22
a_butta
Ho trovato il file in cui spiega come compilare!
pastebin.com/…

Lo seguo dalla linea 117 in poi, uso per la compilazione GCC tramite cygwin. Ho provato a compilare attraverso MSYS2 ma ricevo errore, non effettua la configurazione.

seguendo le istruzioni arrivo alla linea 173 del file, ove bisogna effettuare il make

Ottengo i seguenti errori:

../src/msw/volume.cpp: In static member function ‘static wxArrayString wxFSVolumeBase::GetVolumes(int, int)’:
../src/msw/volume.cpp:398:49: error: no matching function for call to ‘_InterlockedExchange(long int*, int)’
     ::InterlockedExchange(&s_cancelSearch, FALSE);     // reset
                                                 ^
In file included from /usr/include/w32api/windows.h:70:0,
                 from ../include/wx/msw/wrapwin.h:65,
                 from ../src/msw/volume.cpp:45:
/usr/include/w32api/winbase.h:2973:29: note: candidate: long unsigned int _InterlockedExchange(volatile long unsigned int*, long unsigned int) <near match>
   FORCEINLINE unsigned long InterlockedExchange (unsigned long volatile *Target, unsigned long Value) {
                             ^
/usr/include/w32api/winbase.h:2973:29: note:   conversion of argument 1 would be ill-formed:
../src/msw/volume.cpp:398:49: error: invalid conversion from ‘long int*’ to ‘volatile long unsigned int*’ [-fpermissive]
     ::InterlockedExchange(&s_cancelSearch, FALSE);     // reset
                                                 ^
In file included from /usr/include/w32api/windows.h:70:0,
                 from ../include/wx/msw/wrapwin.h:65,
                 from ../src/msw/volume.cpp:45:
/usr/include/w32api/winbase.h:2982:32: note: candidate: long long unsigned int _InterlockedExchange(volatile long long unsigned int*, long long unsigned int) <near match>
   FORCEINLINE unsigned __int64 InterlockedExchange (unsigned __int64 volatile *Target, unsigned __int64 Value) {
                                ^
/usr/include/w32api/winbase.h:2982:32: note:   conversion of argument 1 would be ill-formed:
../src/msw/volume.cpp:398:49: error: invalid conversion from ‘long int*’ to ‘volatile long long unsigned int*’ [-fpermissive]
     ::InterlockedExchange(&s_cancelSearch, FALSE);     // reset
                                                 ^
../src/msw/volume.cpp: In static member function ‘static void wxFSVolumeBase::CancelSearch()’:
../src/msw/volume.cpp:469:48: error: no matching function for call to ‘_InterlockedExchange(long int*, int)’
     ::InterlockedExchange(&s_cancelSearch, TRUE);
                                                ^
In file included from /usr/include/w32api/windows.h:70:0,
                 from ../include/wx/msw/wrapwin.h:65,
                 from ../src/msw/volume.cpp:45:
/usr/include/w32api/winbase.h:2973:29: note: candidate: long unsigned int _InterlockedExchange(volatile long unsigned int*, long unsigned int) <near match>
   FORCEINLINE unsigned long InterlockedExchange (unsigned long volatile *Target, unsigned long Value) {
                             ^
/usr/include/w32api/winbase.h:2973:29: note:   conversion of argument 1 would be ill-formed:
../src/msw/volume.cpp:469:48: error: invalid conversion from ‘long int*’ to ‘volatile long unsigned int*’ [-fpermissive]
     ::InterlockedExchange(&s_cancelSearch, TRUE);
                                                ^
In file included from /usr/include/w32api/windows.h:70:0,
                 from ../include/wx/msw/wrapwin.h:65,
                 from ../src/msw/volume.cpp:45:
/usr/include/w32api/winbase.h:2982:32: note: candidate: long long unsigned int _InterlockedExchange(volatile long long unsigned int*, long long unsigned int) <near match>
   FORCEINLINE unsigned __int64 InterlockedExchange (unsigned __int64 volatile *Target, unsigned __int64 Value) {
                                ^
/usr/include/w32api/winbase.h:2982:32: note:   conversion of argument 1 would be ill-formed:
../src/msw/volume.cpp:469:48: error: invalid conversion from ‘long int*’ to ‘volatile long long unsigned int*’ [-fpermissive]
     ::InterlockedExchange(&s_cancelSearch, TRUE);
                                                ^
make: *** [Makefile:29072: basedll_volume.o] Error 1


Non ho idea di come risolvere :d


aaa
02/10/16 17:35
lumo
Potresti usare la libreria precompilata che trovi al link messo all'inizio del file. Se il linking è dinamico dovresti trovare un .dll da qualche parte, quello insieme agli header file dovrebbero permetterti di usare wxWidgets.
aaa
02/10/16 17:56
a_butta
Ok provo a seguire il tuo consiglio.
Tra le build presenti ho scaricato wxMSW-3.0.2_gcc471TDM_x64_ReleaseDLL.7z, che mi sembra la più adatta al compilatore che uso.
Le dll che trovo nel file sono quelle riportate nell'immagine sotto.

Scusami se ti infastidisco oltre. Gli header li prendo da dove esattamente? Dal package NON COMPILATO dentro la cartella wxWidget\include\wx trovo una serie di header tra cui wx.h, è corretto?
Come associo gli header alle dinamiche?

Grazie mille e scusa per la scarsa conoscenza in merito



PS: googlando ho trovato che l'errore restituito sembra derivare da un problema di Cygwin 64bit nell'uso della funzione InterlockedExchange. Non è che ci abbia capito granchè. Adesso sto cercando anche di ricompilare il tutto con Cygwin 32bit e vediamo. Ma non ci spero granché

aaa
02/10/16 18:02
lumo
Gli header li puoi prendere un po' da dove voi ma ti conviene vedere se ce ne sono dentro Release, potrebbe essere che nel codice grezzo ci siano alcuni header non configurati (se hai presente quando si dà ./configure, alcuni header vengono riscritti perché contengono delle macro all'interno).

Per impostare l'utilizzo della libreria devi vedere come si fa su Eclipse, io non lo conosco quindi non saprei. Devi aggiungere la cartella con gli headers alle 'include directories' e la dll alle libraries.

EDIT: vedendo l'immagine, probabilmente ti conviene aggiungerle tutte (probabilmente però non è proprio necessario, dipende da cosa usi).
Ultima modifica effettuata da lumo 02/10/16 18:03
aaa