windows - Sådan bruger du GtkAda i kommandolinjen?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at kompilere et meget simpelt GtkAda-program i kommandolinje på Windows. Her er app-koden:


`WITH Gtk.Main ;       USE Gtk.Main ; 
WITH Gtk.Window ;     USE Gtk.Window ; 
PROCEDURE Test01 IS
   win : Gtk\_window ;
BEGIN
   Init ; 
   Gtk\_New(Win) ;
   Win.show\_all ; 
   Main ; 
END Test01 ;`


Kompilere med


gcc -c test01.adb -IC:<<path\_to\_GtkAdaincludegtkada>>,
Jeg får test.ali og test01.o som forventet.


Men hvordan man linker libs venligst?


gcc test.o -LC:<<path\_to\_GtkAda>>lib


giver:


`Test01.o:Test01.adb:(.text+0xe): undefined reference to `gtk\_\_main\_\_init'
Test01.o:Test01.adb:(.text+0x21): undefined reference to `gtk\_\_window\_\_gtk\_new'
Test01.o:Test01.adb:(.text+0x3e): undefined reference to `\_\_gnat\_rcheck\_CE\_Access\_Check'
Test01.o:Test01.adb:(.text+0x5e): undefined reference to `gtk\_\_main\_\_main'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: Test01.o: bad reloc address 0x20 in section `.eh\_f
rame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status`


PATH indeholder allerede <<path\_to\_GtkAda>>/bin


Tak skal du have.

Bedste reference


Løsningen er normalt at bruge GNATs projektfiler som beskrevet i dokumentationen installeret med kompilatoren, typisk i ' doc ' eller ' doc / gprbuild 'underkatalog.


En simpel eksempelprojektfil med navnet ' SO.gpr ' kan se sådan ud:


with "gtkada";
project SO is

 for Source\_Dirs use (".");

end SO;


Bemærk den del der siger with "gtkada";. Det betyder, at værktøjskæden derefter vil injicere alle kontakter, der er nødvendige for at lave et Ada/GTK-program.
Så hvis du påberåber GNAT værktøjskæden som denne:


$ gnatmake -PSO test01.adb


Ada-programmet vil kalde i rækkefølge gcc, gnatbind og gnatlink. For hver vil de nødvendige argumenter til kommandoerne blive leveret automatisk.
(Afhængigt af hvilken udgave af GNAT du bruger, kan du også bruge gprbuild.)


Så for eksempel på et Debian/GNU-system med libgtkada2.24.4-dev installeret ser jeg dette:



$ gnatmake -Pso test01.adb
gcc-4.9 -c -I- -gnatA /home/bauhaus/News/SO/test01.adb
gnatbind -shared -x /home/bauhaus/News/SO/test01.ali
gnatlink /home/bauhaus/News/SO/test01.ali -shared-libgcc -L/usr/lib/x86\_64-linux-gnu/ -lgtkada -lgdk-x11-2.0 -lgmodule-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk\_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lfontconfig -lfreetype -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lX11 -lm -o /home/bauhaus/News/SO/test01
$