如何在 Windows 下分发 GtkAda 应用程序?
How to distribute a GtkAda application under Windows?
我在 Windows 上分发 GtkAda 应用程序时遇到问题。我制作了一个可执行文件(使用 Windows 本机编译器)并尝试在另一台 Windows 计算机上使用它。但是,我收到有关缺少 dll 的错误。
我尝试用我的 .exe 分发三个文件夹。
bin
包括GtkAda安装的dll,
etc
包括fonts
、gtk-3.0
和pango
、
lib
包括 gtk-3.0
和 dll。
这是我从 GtkAda documentation
中读到的
我想我可能忘记在项目文件中指定一些东西
这是我的 GPS 项目文件
with "C:\GNAT\GTK\lib\gnat\gtkada";
project Logfilter is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Exec_Dir use "exec";
for Main use ("log_filter_main.adb");
package Builder is
for Executable ("main.adb") use "Logs_Filter";
end Builder;
package Compiler is
for Switches ("ada") use ("-Wl,--subsystem,windows");
end Compiler;
end Logfilter;
我正在使用 glade (gtk 3.14) 文件和 GtkAda 2019。
谢谢。
您将主要可执行文件 (log_filter_main.exe
) 放在哪里?缺少哪些库?
当我使用下面的批处理程序创建目录结构时(更改变量 GTKADA_INSTALL_DIR
和 TARGET_DIR
以匹配您的情况),然后将我的可执行文件(一个简单的 GtkAda 程序)复制到 %TARGET_DIR%\bin
,那么这个可执行文件就可以正常运行了。重要的是应用程序位于 bin
文件夹中,以便在启动期间找到正确的 GTK 运行时库。
create_standalone.bat
SET GTKADA_INSTALL_DIR=C:\GNAT19\GtkAda
SET TARGET_DIR=C:\Test
xcopy /s /i %GTKADA_INSTALL_DIR%\bin\*.dll %TARGET_DIR%\bin\
xcopy /s /i %GTKADA_INSTALL_DIR%\etc\*.* %TARGET_DIR%\etc\
xcopy /s /i %GTKADA_INSTALL_DIR%\lib\gtk-3.0\*.* %TARGET_DIR%\lib\gtk-3.0\
REM Copy your GtkAda application (.exe and other dependencies if applicable)
REM to %TARGET_DIR%\bin\
关于项目文件:首先,还不完全清楚为什么需要 Builder
包,但我可能缺少一些项目特定的 knowledge/requirements 。其次,如果您想摆脱启动 GUI 应用程序时弹出的控制台 window,那么您可能需要使用
package Linker is
for Switches ("ada") use ("-mwindows");
end Linker;
而不是
package Compiler is
for Switches ("ada") use ("-Wl,--subsystem,windows");
end Compiler;
注:
超出问题范围的小附加说明(您可能已经想到了):请不要忘记在关闭主应用程序时退出 GTK 主应用程序 window。定义(例如):
procedure Destroy_Event_Callback
(Widget : access Gtk.Widget.Gtk_Widget_Record'Class)
is
begin
Gtk.Main.Main_Quit;
end Destroy_Event_Callback;
然后在主 window 初始化时将其注册为回调:
Main_Window.On_Destroy (Destroy_Event_Callback'Access);
如果省略 Gtk.Main.Main_Quit
调用,则程序(进程)将在您关闭主 window 后保留 运行(至少在您使用 -mwindows
链接器选项)。
我在 Windows 上分发 GtkAda 应用程序时遇到问题。我制作了一个可执行文件(使用 Windows 本机编译器)并尝试在另一台 Windows 计算机上使用它。但是,我收到有关缺少 dll 的错误。
我尝试用我的 .exe 分发三个文件夹。
bin
包括GtkAda安装的dll,etc
包括fonts
、gtk-3.0
和pango
、lib
包括gtk-3.0
和 dll。
这是我从 GtkAda documentation
中读到的我想我可能忘记在项目文件中指定一些东西
这是我的 GPS 项目文件
with "C:\GNAT\GTK\lib\gnat\gtkada";
project Logfilter is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Exec_Dir use "exec";
for Main use ("log_filter_main.adb");
package Builder is
for Executable ("main.adb") use "Logs_Filter";
end Builder;
package Compiler is
for Switches ("ada") use ("-Wl,--subsystem,windows");
end Compiler;
end Logfilter;
我正在使用 glade (gtk 3.14) 文件和 GtkAda 2019。
谢谢。
您将主要可执行文件 (log_filter_main.exe
) 放在哪里?缺少哪些库?
当我使用下面的批处理程序创建目录结构时(更改变量 GTKADA_INSTALL_DIR
和 TARGET_DIR
以匹配您的情况),然后将我的可执行文件(一个简单的 GtkAda 程序)复制到 %TARGET_DIR%\bin
,那么这个可执行文件就可以正常运行了。重要的是应用程序位于 bin
文件夹中,以便在启动期间找到正确的 GTK 运行时库。
create_standalone.bat
SET GTKADA_INSTALL_DIR=C:\GNAT19\GtkAda
SET TARGET_DIR=C:\Test
xcopy /s /i %GTKADA_INSTALL_DIR%\bin\*.dll %TARGET_DIR%\bin\
xcopy /s /i %GTKADA_INSTALL_DIR%\etc\*.* %TARGET_DIR%\etc\
xcopy /s /i %GTKADA_INSTALL_DIR%\lib\gtk-3.0\*.* %TARGET_DIR%\lib\gtk-3.0\
REM Copy your GtkAda application (.exe and other dependencies if applicable)
REM to %TARGET_DIR%\bin\
关于项目文件:首先,还不完全清楚为什么需要 Builder
包,但我可能缺少一些项目特定的 knowledge/requirements 。其次,如果您想摆脱启动 GUI 应用程序时弹出的控制台 window,那么您可能需要使用
package Linker is
for Switches ("ada") use ("-mwindows");
end Linker;
而不是
package Compiler is
for Switches ("ada") use ("-Wl,--subsystem,windows");
end Compiler;
注:
超出问题范围的小附加说明(您可能已经想到了):请不要忘记在关闭主应用程序时退出 GTK 主应用程序 window。定义(例如):
procedure Destroy_Event_Callback
(Widget : access Gtk.Widget.Gtk_Widget_Record'Class)
is
begin
Gtk.Main.Main_Quit;
end Destroy_Event_Callback;
然后在主 window 初始化时将其注册为回调:
Main_Window.On_Destroy (Destroy_Event_Callback'Access);
如果省略 Gtk.Main.Main_Quit
调用,则程序(进程)将在您关闭主 window 后保留 运行(至少在您使用 -mwindows
链接器选项)。