Delphi中,为什么包含$L指令的链接对象文件排列顺序对最终链接结果影响极大?

2026-04-10 16:252阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计426个文字,预计阅读时间需要2分钟。

Delphi中,为什么包含$L指令的链接对象文件排列顺序对最终链接结果影响极大?

我使用静态链接的sqlite数据库,为了编译每个版本,我需要不断更新使用的目标文件列表。但有时必须做出的改动让我感到困扰。例如,在版本3_6_10中,修改了订单列表前的代码:{${L}'Ob'}。

我使用静态链接的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文件的交叉使用有关的东西,但如果我理解发生了什么,我会感觉更安全

Delphi中,为什么包含$L指令的链接对象文件排列顺序对最终链接结果影响极大?

谢谢

编辑:

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

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

由于Delphi链接器编译器针对的是Delphi语言,并且Delphi语言不允许这样做,因此链接器编译器也不允许这样做.

Pro:链接器编译器要快得多.

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

–jeroen

本文共计426个文字,预计阅读时间需要2分钟。

Delphi中,为什么包含$L指令的链接对象文件排列顺序对最终链接结果影响极大?

我使用静态链接的sqlite数据库,为了编译每个版本,我需要不断更新使用的目标文件列表。但有时必须做出的改动让我感到困扰。例如,在版本3_6_10中,修改了订单列表前的代码:{${L}'Ob'}。

我使用静态链接的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文件的交叉使用有关的东西,但如果我理解发生了什么,我会感觉更安全

Delphi中,为什么包含$L指令的链接对象文件排列顺序对最终链接结果影响极大?

谢谢

编辑:

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

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

由于Delphi链接器编译器针对的是Delphi语言,并且Delphi语言不允许这样做,因此链接器编译器也不允许这样做.

Pro:链接器编译器要快得多.

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

–jeroen