动态链接 ada 运行时

Dynamically linking ada runtime

我已经在 i686-pc-mingw32 GNAT GPL 2015 (20150428-49) 上安装了 GPS GPS 6.1.1 (20150118)

它成功编译了 Hello World,但即使发布可执行文件也很大,因为它包含静态编译的未优化运行时,而且(更重要的是)据我所知,ada 运行时是根据 GPL 许可的,不能静态 link进入闭源可执行文件。

如何将 GPS/gcc 配置为 link 动态运行时?

我会让其他人回答具体问题,这是 (IMO) 一个很好的问题。

在不需要全功能运行时的情况下,最小化运行时大小的相关问题也很好,至于 "Hello World"。将 executable 大小与您平台上安装的内存进行比较,可能会得出结论,这是一种过早优化的情况。但是对于基本的 executables,例如在嵌入式微控制器上,这当然值得一问。

然而还有另一个隐含的问题:

How do I divorce my executable from a GPL-encumbered runtime?

我会回答这个问题。

从历史上看,Gnat RTS 并不总是如此受阻。它曾一度以 "Gnat Modified" GPL, (GMGPL) 为特色,其中运行时文件包含高于 GPL 权利的额外权限,允许您 link 使用 executable 的 RTS 的那些组件,而不会增加您的负担executable 与 GPL - 有效地允许您在闭源许可下发布这样的 executable。 (前提是 none 的其他组件是纯 GPL)。

Gnat GPL 编译器带有纯 GPL 运行时(完全合法),以区别于同一作者的商业产品——他们有权自己放食物 table,他们的 commercial products 有很好的声誉和第一个 class 支持。

然而,FSF 作为 mainstream GCC, which is kept up to date with modern Ada developments including Ada-2012. In some respects it is ahead of Gnat GPL - in the underlying gcc version for example, while in some respects it is behind, as newer Ada features take longer to make it into the FSF branch. But the point here is that it inherited the GMGPL license, and then the very similar "Runtime Exception" in GPLv3. 的一部分提供了旧版 Gnat 编译器的另一个分支 linked "Rationale and FAQ" 应该让您确定它是否满足您的需求。

如果是的话。您可以从源代码编译 gcc(包括 Gnat)以满足您的需要。然而,这不是一个微不足道的项目!因此,对于大多数常见平台,您可以从富有想象力的名称 getadanow.com

中找到 FSF Gnat 编译器的预构建二进制文件

免责声明:我只是指出这个选项。与许可问题一样,不要相信 "random guy on the internet" 这个词,而是研究您正在使用的编译器和 RTS 的实际许可,并采取适当的法律建议。

这非常接近 this question, and the same answer 适用。

但是,如果您希望通过 Project > Properties 对话框在 GPS 中编辑项目属性:

  1. 转到 开关 选项卡(在左侧)

  2. 转到 活页夹 选项卡(在顶部)

  3. 勾选 共享 GNAT 运行 时间 复选框。

当你在那里时,也勾选 Store call stack in exceptions 复选框;这有助于调试未处理的异常(活页夹开关是 -E)。