c - .exp有什么用,.lib和.dll有什么区别?

标签 c dll linker static-libraries

在编译和链接时,.exp有什么用? .lib 和 .dll 有什么区别?我知道将使用 .lib,而运行程序时将使用链接和 .dll。但是 .lib 和 .dll 到底有什么区别呢?

.lib 文件不包含来自.dll 文件的函数代码吗? 使用两个单独的文件有什么需要?

请澄清。

最佳答案

对于 DLL 的导入库,.lib 文件根本不包含任何实际代码。它基本上只包含相关 DLL 中的函数列表——足以让链接器将对该 DLL 的引用嵌入到与库链接的内容中,但除此之外没有太多内容。

.exp 文件是一个导出文件——基本上与 .lib 文件几乎相同。当你有一个循环依赖时,它被使用(至少主要)。例如,假设您有一个用作可执行文件插件的 DLL。可执行文件提供一些供插件 DLL 使用的导出函数,但也需要能够调用插件中的一些函数(例如加载和初始化插件)。

在构建可执行文件以提供 .lib 文件之前,DLL 不会链接——但是在构建 DLL 以提供 .lib 文件之前,可执行文件不会链接。要打破依赖关系,您可以针对可执行文件运行链接器,这会失败(因为它找不到 DLL 的 .lib 文件),但生成一个 .exp 文件。然后将 DLL 链接到可执行文件的 .exp 文件。然后,您可以使用 DLL 的 .lib 文件重新运行链接以生成可执行文件。

关于c - .exp有什么用,.lib和.dll有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727020/

相关文章:

C 字符数组溢出,好练习吗?

c - C中的空函数指针是什么意思?

无法让 modf() 工作

c# - 如何在 C# 项目中构建具有自定义文件扩展名的 DLL?

winapi - 完成后如何从目标进程卸载注入(inject)的 DLL?

gcc - 无法识别文件格式;使用 GCC 将其视为链接描述文件

C语言编程数组元素减法

c++ - 在测试工具下获取当前可执行目录失败

c - 动态链接一个简单的二进制文件

linux - 为什么安装的Centos系统使用的是ld.2.17,编译同版本的glibc-2.17却生成ld.so