我知道dll可以在可执行文件加载或运行时加载(使用LoadLibrary api调用)。
对于加载时加载,我似乎只需要dll文件:不需要.a,.lib或.def文件。我想知道这些文件格式代表什么,他们的目的是什么。
我所知道的一些具体问题:
> .a是Unix上通常用于静态库的扩展。 .a文件使用GNU ld的–out-implib选项生成。据说是一个“进口图书馆”,足够公平。那么问题是“如果在链接时不需要它,那么进口图书馆有什么好处?”
> .lib是Windows上用于静态库的扩展,根据wikipedia,Windows也可以使用“import library”,所以我强烈怀疑他们只是binutils调用了.a文件的另一个名字。真假 ?
>所有页面我可以找到.def文件列出dll的导出符号。是不是有点类似于“进口图书馆”应该做什么?
>另外,我读了here,使用.def文件是在源文件(我做的)中手动指定导出的替代方法。但是我也记得读取(找不到参考).def文件提供一个索引(ordinal)到导出的符号中,允许更快的运行时加载。是这样吗 ?