使用 DEF 文件而不是 LIB 文件链接到 DLL?

Meh*_*dad 3 windows linker function dynamic-linking

我了解到您可以:

  • 将 .DLL 文件转换为.DEF文件,其中包括其导出
    (编辑:这不适用于许多约定)
  • .DEF文件转换为 .LIB 文件,您可以使用该文件链接到 DLL

为什么(大多数)链接器不能链接到给定.DEF 文件而不是 .LIB 文件的 DLL ?

Mar*_*ell 5

最终,这里的答案是“因为没有人非常想要它,而且它并没有真正帮助任何东西”。

DEF 文件是为 DLL 创建导入库的输入文件。然后,稍后,当另一个链接使用 DLL 时,importlib 本身就是一个输入。importlib 在外面看起来很特别,但是当您查看内部时,它实际上只是一个带有对象的稍微特殊的库。

完全可以修改链接器以直接获取 def 文件(或 DLL,就此而言)。

但是链接器的设计中心是它将对象作为输入并输出一个 PE 可执行文件。因此,将 DEF 或 DLL 作为输入超出了设计模式。

除此之外,这将毫无意义——允许链接器将 DEF 文件或 DLL 作为输入既不会启用任何重要的新场景,也不会将此功能排除在外阻止任何事情。将您拥有的 DEF 文件(即使没有实际的 DLL)转换为可用的 importlib 是片刻的工作(只需为每个 DEF 条目创建假的空函数并链接它)。所以没有理由添加直接链接 DEF 文件的功能。

马丁