我尝试在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
谢谢。
答案 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程序将依次调用gcc
,gnatbind
和gnatlink
。对于每个,将自动提供命令的必要参数。
(根据您使用的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 $