【发布时间】:2011-09-19 07:57:26
【问题描述】:
我正在使用 GNU binutils 在 Windows 上从程序集构建一个 dll。
我知道 dll 可以在加载可执行文件时加载,也可以在运行时加载(使用 LoadLibrary api 调用)。
对于加载时加载,我似乎只需要 dll 文件:不需要 .a、.lib 或 .def 文件。我想知道这些文件格式代表什么以及它们的用途是什么。
我知道的和一些具体的问题:
.a 是 Unix 上通常用于静态库的扩展名。 .a 文件是使用 GNU ld 的--out-implib 选项生成的。据说是一个“导入库”,很公平。那么问题是“如果我在链接时不需要导入库对我有什么好处?”
.lib 是 Windows 上用于静态库的扩展名,根据维基百科,它也用作 Windows 下的“导入库”,所以我强烈怀疑它们只是 binutils 调用的另一个名称。一个文件。真/假?
我能找到的所有页面都列出了 .def 文件列出了 dll 的导出符号。这不是有点类似于“导入库”应该做的事情吗?
另外,我读到here,使用 .def 文件是在源文件中手动指定导出的替代方法(我这样做了)。但我还记得阅读(找不到返回的引用).def 文件为导出的符号提供了一个索引 (ordinal),从而可以更快地加载运行时。是这样吗?
【问题讨论】: