gpt4 book ai didi

delphi - 为什么使用 $L 指令链接的目标文件的顺序很重要?

转载 作者:行者123 更新时间:2023-12-03 15:29:50 25 4
gpt4 key购买 nike

我使用静态链接的 sqlite 数据库,为了编译每个下一个版本,我有时必须对所使用的目标文件列表进行微小的更改。但有时我必须做出的改变让我感到困惑。例如在版本 3_6_10 之前此顺序

{$L 'Objs\is.OBJ'}
{$L 'Objs\mbisspc.OBJ'}

没问题,但从 3_6_12 开始链接器说

unsatisfied forward or external declaration _isspace

但是将顺序更改为

{$L 'Objs\mbisspc.OBJ'}
{$L 'Objs\is.OBJ'}

有帮助。至于sqlite中的变化,它在3_6_12中确实停止使用c函数isspace并开始使用内部等效函数,因此“isspace”关键字甚至不会出现在obj文件中。

那么为什么带有 $L 指令的链接对象文件的顺序很重要,我可以在哪里阅读更多相关信息?我想这与列出的 obj 文件的交叉使用有关,但如果我了解发生了什么,我会感到更安全

谢谢

最佳答案

编辑:

截至 David Heffernan 的评论链接到his answer到此另一个question on linking .obj file in Delphi ,我用 compiler 替换了 linker,并添加了下面的 斜体 部分:

C 编译器使用多遍 链接器 编译器,它知道如何解决 .obj 文件之间的前向和循环依赖关系。

由于Delphi linker 编译器是针对Delphi语言的,而Delphi语言不允许这样做,所以 linker 编译器也不允许这样做。

优点: 链接器 编译器速度更快。

缺点:您需要通过按正确的顺序放置 .obj 文件来帮助 链接器 编译器
,或者通过手动解决依赖关系(参见上面提到的 answer by David Heffernan ).

--杰罗恩

关于delphi - 为什么使用 $L 指令链接的目标文件的顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228127/

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