请原谅我对静态库的命名,但我的意思是谈论没有代码的静态库(.lib),而只是通过获取dll并使其成为导入库而生成的引用。
我是否正确地理解了编译器(MSVC++)在本例中添加的代码,如LoadLibrary(“foo.dll”)、GetProcAddress("barMethod");当在c++代码中引用时?
有没有办法找出它是否真的那么做?
也许使用某种静态分析工具来告诉我生成了什么代码?
发布于 2016-01-17 10:50:33
静态库有代码。没有代码的.lib文件不是静态库,而是导入库(正如您正确地观察到的)。
在这种情况下,VC++可以做两件事。默认情况是将导入库编译到(IAT)中。在运行时,操作系统将解析引用。另一种方法称为延迟负载链接。在这种情况下,VC++确实会插入对LoadLibrary和GetProcAddress的调用。
Dependency仍然是观察这一切是如何工作的相关工具。
发布于 2016-01-17 10:46:55
如果您将程序链接到某个库(.lib),该库仅是某个.dll的导出库,则编译器不会调用(或添加此类代码)任何LoadLibrary或smth。这并不取决于您正在使用的编译器。
.dll总是在应用程序启动时由操作系统加载(编辑:除了延迟加载链接)(如果使用导入库的静态链接)。编译器只创建必须从.dll加载的名称列表。这个列表被称为进口表。
https://stackoverflow.com/questions/34837051
复制相似问题