Autore: Fabio Di Matteo
Ultima revisione: 06/06/2015 - 11:49
Vedremo, di seguito, come sviluppare su una postazioni Gnu/Linux applicazioni Vala che verranno compilate staticamente per Windows. C'e' da dire che il passaggio non è unico, nel senso che il sorgente vala viene prima trasformato in codice C da compilatore Vala e in seguito lo compileremo staticamente tramite il pacchetto Mxe come abbiamo fatto qui: Mettere il file della gui creata con glade dentro l'eseguibile . Automatizzeremo tutto con un unico makefile.
intermedio.vala
using Gtk; int main (string[] args) { Gtk.init (ref args); var window = new Window (); window.title = "First GTK+ Program"; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size (350, 70); window.destroy.connect (Gtk.main_quit); var button = new Button.with_label ("Click me!"); button.clicked.connect (() => { button.label = "Thank you"; }); window.add (button); window.show_all (); Gtk.main (); return 0; }
CPP = valac OPTS = --pkg gtk+-2.0 --pkg gmodule-2.0 CPP_WIN = i686-pc-mingw32-gcc OPTS_WIN_C = `i686-pc-mingw32-pkg-config --cflags --libs gio-2.0 gtk+-2.0 gmodule-2.0` all: $(CPP) -C intermedio.vala $(OPTS) $(CPP_WIN) intermedio.c -o intermedio.exe $(OPTS_WIN_C) strip intermedio.exe clean: rm intermedio.c intermedio.exe
Per quanto riguarda le applicazioni che fanno uso di Gtkbuilder c'è da dire che nelle mie prove non hanno funzionato con il collegamento statico delle Gtk. Ho dovuto percio' ricorrere al collegamento dinamico alle stesse. Prima di tutto ho scaricato il Pacchetto bundle e l'ho messo all'interno di una mia cartella “bin” dentro la mia home. In seguito mi sono ricavato i flag di compilazione lanciando tramite wine pkg-config.exe dentro la bin/ del bundle .
Sorgente preso dagli esempi ufficiali.
intermedio.vala
using Gtk; static Window window ; //Le callbacks sono nel file esterno.vala int main (string[] args) { Gtk.init (ref args); try { // If the UI contains custom widgets, their types must've been instantiated once // Type type = typeof(Foo.BarEntry); // assert(type != 0); var builder = new Builder (); builder.add_from_file ("gui.ui"); builder.connect_signals (null); window = builder.get_object ("window") as Window; window.show_all (); Gtk.main (); } catch (Error e) { stderr.printf ("Could not load UI: %s\n", e.message); return 1; } return 0; }
esterno.vala
using Gtk; static int c=0; [CCode (cname = "G_MODULE_EXPORT on_button1_clicked")] public void on_button1_clicked (Button source) { c++; source.label = "Click "+ c.to_string(); }
Come si puo' notare se si vuole usare la funzione builder.connect_signals (per autoconnettere i segnali alle callbacks) e' necessario inoltre aggiungere la seguente macro prima della definizione della callbacks stessa (solo su windows).
[CCode (cname = "G_MODULE_EXPORT on_button1_clicked")]
CPP = valac OPTS = --pkg gtk+-2.0 --pkg gmodule-2.0 CPP_WIN = i686-pc-mingw32-gcc OPTS_WIN_C = -mms-bitfields -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/glib-2.0 -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/lib/glib-2.0/include -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/gtk-2.0 -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/lib/gtk-2.0/include -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/atk-1.0 -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/cairo -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/gdk-pixbuf-2.0 -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/pango-1.0 -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/freetype2 -I/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/include/libpng14 -L/home/fabio/bin/gtk+-bundle_2.24.10-20120208_win32/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lglib-2.0 -lintl all: $(CPP) -C intermedio.vala -C esterno.vala $(OPTS) $(CPP_WIN) esterno.c intermedio.c -o intermedio.exe $(OPTS_WIN_C) strip intermedio.exe clean: rm intermedio.c intermedio.exe
Ricordarsi di aggiustare il path dei flag di compilazione dei sorgenti C nel mekefile. Ricavati lanciando wine pkg-config.exe
dentro la bin/ del bundle .
Se non si è provveduto ad installare le gtk in path per avviare l'eseguibile è sufficiente copiare lo stesso e il file dell'interfaccia dentro la directory “bin” del bundle gtk. Per intenderci nella stessa cartella di pkg-config.exe .
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.