如何在命令行中使用 GtkAda?
How to use GtkAda in command-line?
我尝试在 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。
但是如何link库?
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
谢谢。
解决方案通常是使用随编译器安装的文档中描述的 GNAT 项目文件,通常在“doc”或“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
$
我尝试在 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。
但是如何link库?
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
谢谢。
解决方案通常是使用随编译器安装的文档中描述的 GNAT 项目文件,通常在“doc”或“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 $