我已经编译了一个使用Win32Ada库的simple Ada application。
我在Windows上使用以下命令编译应用程序:
gnatmake C:\GNAT\2020\bin\src\main.adb -I"C:\GNAT\2020\lib\win32ada" -largs -lwin32ada。
应用程序在编译机器上按预期工作,并且在执行main.exe时,将执行MessageBox。
但是,当尝试在另一个没有安装Ada库的Windows系统上执行应用程序时,我收到了一个错误:

Ada支持静态编译吗?
我可以编译应用程序,这样main.exe就可以在任何Windows主机上执行,而不需要捆绑DLL的吗?
我在gnatmake --help中找不到答案(但我也是Ada的新手)。
发布于 2021-01-13 14:30:37
默认的链接模式在Windows上是静态的。因此,通常情况下,您不需要添加任何选项。如果需要强制执行,请使用-bargs -static gnatmake绑定器选项或添加
package Binder is
for Default_Switches ("ada") use ("-static");
end Binder;添加到您的.gpr项目文件。
发布于 2021-01-15 05:49:17
Ada支持静态编译吗?
是的,这是默认模式。
我是否可以编译应用程序,这样main.exe就可以在任何Windows主机上执行,而不需要捆绑DLL?
您应该能够这样做,但是我并没有太多地使用win32ada库;如果您不能做像Deplhi这样的事情,我会很惊讶,在Deplhi中,可执行文件与VCL“直接”接口,尽管使用的是Win32的抽象。
我认为您要标记的项目在链接器中,而不是活页夹中。(尽管您可能两者都需要。)要检查GNAT参数的本质,最好的地方是the documentation,原因很简单,因为有大量参数在命名或用法上本质上是非直观的。
您可能会对--unchecked-shared-lib-imports感兴趣;检出win32ada项目文件(尤其是任何场景变量)可能会使您能够将其切换到静态库。在最坏的情况下,如果您将For library_kind use "static";添加到Win32Ada库中,您应该能够自己静态地构建它。
https://stackoverflow.com/questions/65696374
复制相似问题