在Windows环境中
当我尝试将DLL链接到我的程序时显式(使用LoadLibrary),
当我试图隐式地将DLL链接到我的程序时(使用头文件)
然后它需要Lib使用DLL生成的相关文件.
我的问题是
Lib文件?DLL或获取Header file?我已经走过了这个问题.但我无法理解任何有价值的理由.请,有人可以用简单的方式帮助解释这个问题.谢谢.
为什么隐式链接也需要Lib文件。
.libs中有dll的导入信息,可以使用以下命令查看该信息dumpbinWindows/Visual Studio SDK中包含的命令检查该信息。
这是ws2_32.lib中recv的链接信息例如:
Version : 0
Machine : 14C (x86)
TimeDateStamp: 4907F6ED Wed Oct 29 01:38:53 2008
SizeOfData : 00000014
DLL name : WS2_32.dll
Symbol name : _recv@16
Type : code
Name type : ordinal
Ordinal : 16
Run Code Online (Sandbox Code Playgroud)
您可以检查 ws2_32.dll 中是否有序号和名称(检查现在是否显示要导入 DLL)。
需要从“Lib”文件中检索哪些无法从 DLL 或头文件中获取的信息
在头文件中,没有从何处提取导入的信息,因此它们在编译时被标记为导入 (__imp__name),当它链接到 .lib 时,它会解析名称:
如果问题 2 有问题,显式加载时如何检索这些信息。
如果显式加载指的是 LoadLibrary,则您是在运行时而不是链接时告诉它。因此PE加载器将在PATH中搜索DLL并动态加载它。然后你有其他函数来获取导出的函数地址。
如果你有不明白的地方就问我,如果你想更好地理解的话,可以尝试使用 dumpbin 并阅读有关 PE 的内容。