gpt4 book ai didi

ada - Ada 中的绑定(bind)与链接

转载 作者:行者123 更新时间:2023-12-02 13:13:06 25 4
gpt4 key购买 nike

我想知道使用 Ada 代码时绑定(bind)和链接之间的根本区别是什么?我在谷歌上找不到很好的解释,这就是我问这个问题的原因。

对于绑定(bind)过程,输入是什么,输出是什么?绑定(bind)和链接之间有什么关系?我认为需要首先完成绑定(bind)。

谢谢,博格丹。

最佳答案

使用 GNAT,绑定(bind)器执行两项工作:首先,检查所有必要的编译是否已完成,以便程序的闭包保持一致,其次安排细化的发生(任何 Ada 都需要这些工作)构建系统,但它们的实现方式可能不同)。

当使用gnatmake时,这些工作中的第一个通常是多余的,因为gnatmake已经组织了所有必要的编译。有可能会犯这个错误(例如,将一个单元移动到另一个库,而不是从原始位置删除其编译产品),但相当困难!

精化是 Ada 的一项功能,许多其他语言都不具备。 gcc.gnu.org有解释和其他地方,但举一个简单的例子,

with Foo;
package Bar is
Int : Integer := Foo.Value;
[...]
end Bar;

package Foo is
function Value return Integer;
[...]
end Foo;

我们不知道 Foo.Value 在编译时将返回什么,而且我们可能直到运行时才知道(如果它从命令行读取一个值怎么办?),所以Foo.Value 必须处于合适状态才能在 Bar 初始化之前调用。

Bar 的初始化发生在 Bar 被详细说明时,对于 Foo 也是如此,所以它是 gnatbind'我们的工作就是认识到这一点,并安排 FooBar 之前详细阐述。

它通过在函数(通常称为 adanit)和 main()(将由操作系统并调用 adainit,然后调用 Ada 主程序,例如 program.adb

gnatmake 然后调用 gnatlink,它采用 Ada 中名为 b-program.ad 的文件中的 gnatbind 生成的代码[sb]b__program.ad[sb]b~program.ad[sb] 取决于编译器的版本,编译它并链接它与程序的闭包一起生成最终的可执行文件。

关于ada - Ada 中的绑定(bind)与链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com