在Visual C++中,当我构建一个dll时,输出文件是.dll和.lib.
是.lib文件中内置的dll的名称.
我问这个问题的原因是:当我通过导入这个dll并运行exe来构建我的exe时,exe会尝试找到dll以将其加载到进程地址空间中.
由于我们只是在项目属性中指定库名(.lib文件),因此exe如何知道dll的名称.
注意:我在dumpbin libary文件(.lib)中看到它不包含dll的名称.
LIB文件在EXE中变为导入表.这确实包含DLL的名称.
如果你跑,你可以看到这个dumpbin /all MyDLL.lib
.请注意,dumpbin MyDll.lib
它本身并没有显示任何有用的东西:你应该使用/all
.
这显示了.LIB文件中定义的所有部分.您可以忽略任何.debug
部分,因为它们不会出现在发布版本中.在.LIB文件中,有一组.idata节.在我刚刚构建的DLL项目中,LIB文件包含一个.idata$4
部分,用于定义要放在EXE导入表中的符号,包括DLL名称:
Archive member name at 83E: MyDll.dll/ 497C3B9F time/date Sun Jan 25 10:14:55 2009 uid gid 0 mode 2E size correct header end Version : 0 Machine : 14C (x86) TimeDateStamp: 497C3B9F Sun Jan 25 10:14:55 2009 SizeOfData : 0000001A DLL name : MyDll.dll Symbol name : ?fnMyDll@@YAHXZ (int __cdecl fnMyDll(void)) Type : code Name type : name Hint : 2 Name : ?fnMyDll@@YAHXZ