动态链接ada运行时

时间:2016-02-01 10:39:45

标签: runtime ada dynamic-linking gnat gnat-gps

我已在[{1}}上托管GPS GPS 6.1.1 (20150118)

它成功编译了Hello World,但是即使发布可执行文件也很庞大,因为它包含静态编译的非优化运行时和(更重要的)据我所知,ada运行时是根据GPL许可的,并且不能静态链接到关闭-source executable。

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

2 个答案:

答案 0 :(得分:2)

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

同样好的是最小化运行时大小的相关问题,其中不需要全功能运行时,如同#34; Hello World"。将可执行文件大小与平台上安装的内存进行比较,可以得出结论,这是过早优化的情况。但对于简单的可执行文件,例如在嵌入式微控制器上,当然值得一提。

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

  

如何将我的可执行文件与GPL加密的运行时分开?

我会回答这个问题。

历史上,Gnat RTS并非总是如此受阻。有一段时间它的特色是"Gnat Modified" GPL, (GMGPL),其中运行时文件包含高于GPL权限的额外权限,允许您将RTS的这些组件与可执行文件链接,而不会使您的可执行文件与GPL负担 - 有效地允许您在封闭源许可下发布此类可执行文件。 (如果其他组件都不是纯GPL)。

Gnat GPL编译器附带一个纯粹的GPL运行时(完全合法),以区别于同一作者的商业产品 - 他们有权将食物放在自己的桌子上,而他们的commercial products具有出色的表现声誉和一流的支持。

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

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

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

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

答案 1 :(得分:2)

这非常接近this question,同样适用answer

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

  1. 转到开关标签(位于左侧)

  2. 转到 Binder 标签(位于顶部)

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

  4. 当你在那里时,勾选存储调用堆栈中的异常复选框;这可以帮助调试未处理的异常(活页夹切换为-E)。