windows – 链接:.a,.lib和.def文件
我使用GNU binutils在Windows上从程序集构建一个DLL。
我知道dll可以在可执行文件加载或运行时加载(使用LoadLibrary api调用)。 对于加载时加载,我似乎只需要dll文件:不需要.a,.lib或.def文件。我想知道这些文件格式代表什么,他们的目的是什么。 我所知道的一些具体问题: > .a是Unix上通常用于静态库的扩展。 .a文件使用GNU ld的–out-implib选项生成。据说是一个“进口图书馆”,足够公平。那么问题是“如果在链接时不需要它,那么进口图书馆有什么好处?”
Linux上的静态库具有.a文件扩展名。 Windows上的静态库具有.lib文件扩展名。 Windows上的动态库具有.dll扩展名;为了链接到DLL,需要导入库。导入库是一个静态库。它包含加载DLL所需的代码。现在您使用GCC(而不是cl.exe)在Windows上编译。 GCC对于导入库有另一个文件扩展名约会,它应该称为* .dll.a或* .a“,如您所提及的
doc for the --out-implib 中所述。
导入库(带有MSVC或.dll.a的.lib与GCC)是静态库:它们包含加载DLL的代码。 I had the same question the other day. DLL可能具有导出的函数和未导出的函数。导入库必须知道哪些功能被导出,哪些不是。告诉它的一个方法是DEF文件。
另请参阅MSDN: Exporting Functions from a DLL by Ordinal Rather Than by Name,一起应该回答你最后一个按索引出口的问题或序号。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-runtime – Metro App FileIO.WriteTextAsync多线程
- Windows上的IPython – 无高亮显示或自动完成
- window 杀固定端口的进程
- 在Windows server2008中搭建sqli-lab实验环境
- 在Windows Phone上将base64字符串转换为C#中的图像
- win7
- windows-7 – powershell as gvim(vim):shell
- 应用程序如何在Windows任务栏上显示对象?
- windows-server-2008 – Windows高级防火墙 – 添加授权计算
- windows-server-2012 – Receiver将TCP窗口大小限制为64,51