首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用没有代码的静态库时,VC++会添加对LoadLibrary的调用吗?

问当使用没有代码的静态库时,VC++会添加对LoadLibrary的调用吗?
EN

Stack Overflow用户
提问于 2016-01-17 09:55:00
回答 2查看 704关注 0票数 2

请原谅我对静态库的命名,但我的意思是谈论没有代码的静态库(.lib),而只是通过获取dll并使其成为导入库而生成的引用。

我是否正确地理解了编译器(MSVC++)在本例中添加的代码,如LoadLibrary(“foo.dll”)、GetProcAddress("barMethod");当在c++代码中引用时?

有没有办法找出它是否真的那么做?

也许使用某种静态分析工具来告诉我生成了什么代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-17 10:50:33

静态库有代码。没有代码的.lib文件不是静态库,而是导入库(正如您正确地观察到的)。

在这种情况下,VC++可以做两件事。默认情况是将导入库编译到(IAT)中。在运行时,操作系统将解析引用。另一种方法称为延迟负载链接。在这种情况下,VC++确实会插入对LoadLibrary和GetProcAddress的调用。

Dependency仍然是观察这一切是如何工作的相关工具。

票数 4
EN

Stack Overflow用户

发布于 2016-01-17 10:46:55

如果您将程序链接到某个库(.lib),该库仅是某个.dll的导出库,则编译器不会调用(或添加此类代码)任何LoadLibrary或smth。这并不取决于您正在使用的编译器。

.dll总是在应用程序启动时由操作系统加载(编辑:除了延迟加载链接)(如果使用导入库的静态链接)。编译器只创建必须从.dll加载的名称列表。这个列表被称为进口表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34837051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档