如何在命令行中使用GtkAda?

时间:2017-04-14 12:25:23

标签: windows gtk mingw gtk3 ada

我尝试在Windows上的命令行中编译一个非常简单的GtkAda应用程序。这是应用代码:

`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 ;`

使用

进行编译

gcc -c test01.adb -IC:\<<path_to_GtkAda\include\gtkada>>, 我按预期获得了test.ali和test01.o。

但是如何链接libs 呢?

gcc test.o -LC:\<<path_to_GtkAda>>\lib

给出:

`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已包含<<path_to_GtkAda>>/bin

谢谢。

1 个答案:

答案 0 :(得分:3)

解决方案通常是使用GNAT的项目文件,如随编译器一起安装的文档中所述,通常在“ doc ”或&#34; doc / gprbuild “子目录。

名为“ SO.gpr ”的简单示例项目文件可能如下所示:

with "gtkada";
project SO is

 for Source_Dirs use (".");

end SO;

请注意with "gtkada";部分。这意味着工具链将注入制作Ada / GTK程序所需的所有开关。 然后,如果你像这样调用GNAT工具链:

$ gnatmake -PSO test01.adb

Ada make程序将依次调用gccgnatbindgnatlink。对于每个,将自动提供命令的必要参数。 (根据您使用的GNAT版本,您也可以使用gprbuild。)

所以,例如在安装了libgtkada2.24.4-dev的Debian / GNU系统上,我看到了:

$ 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
$