1

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

它成功编译了 Hello World,但即使发布可执行文件也很大,因为它包括静态编译的未优化运行时,并且(更重要的是)据我所知,ada 运行时是在 GPL 下获得许可的,并且不能静态链接到封闭源可执行文件.

如何配置 GPS / gcc 以动态链接运行时?

4

2 回答 2

2

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

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

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

如何将我的可执行文件与受 GPL 限制的运行时分离?

我会回答这个问题。

从历史上看,Gnat RTS 并不总是如此受阻。曾几何时,它以“Gnat Modified” GPL (GMGPL)为特色,其中运行时文件包含 GPL 权限之上的额外权限,允许您将 RTS 的这些组件与可执行文件链接,而不会给您的可执行文件带来 GPL 负担 -有效地允许您在封闭源代码许可下发布这样的可执行文件。(前提是它的其他组件都不是纯 GPL)。

Gnat GPL 编译器带有纯 GPL 运行时(完全合法),以将其与来自同一作者的商业产品区分开来——这些作者有权将食物放在自己的餐桌上,他们的商业产品享有良好的声誉和一流的支持。

然而,还有另一个旧版 Gnat 编译器的分支,由 FSF 作为主流 GCC的一部分提供,它与包括 Ada-2012 在内的现代 Ada 开发保持同步。在某些方面它领先于 Gnat GPL - 例如在底层 gcc 版本中,而在某些方面它落后于新的 Ada 功能需要更长的时间才能使其进入 FSF 分支。但这里的重点是它继承了 GMGPL 许可证,然后是GPLv3 中非常相似的“运行时异常”。链接的“基本原理和常见问题解答”应该让您确定这是否满足您的需求。

如果是这样。您可以从源代码编译 gcc(包括 Gnat)以满足您的需求。然而,这不是一个简单的项目!因此,对于大多数常见平台,您可以从富有想象力的getadanow.com中找到 FSF Gnat 编译器的预构建二进制文件

免责声明:我只是指出这个选项。与许可问题一样,不要接受“互联网上的随机人”这个词,而是研究您正在使用的编译器和 RTS 的实际许可,并采取适当的法律建议。

于 2016-02-01T13:14:36.193 回答
2

这与这个问题非常接近,同样的答案也适用。

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

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

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

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

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

于 2016-02-01T14:21:53.360 回答