隐式链接dll的优点

时间:2016-04-17 14:47:06

标签: c++ dll dynamic-linking

我不认为这与另一个问题重复。因为那个是关于实际的动态与静态LIBRARY。不是隐式/ explic动态库的链接。

在我目前的项目中,我必须首次面对图书馆。我读了很多关于静态库和dll的东西,到目前为止,这就是我的理解(希望如果我理解错误,有人可以指出我的错误)。我顺便使用qt creator。

首先,静态库和静态链接。它创建一个包含所有函数的.lib文件,并且可以添加(静态链接到?)应用程序。就我而言,添加到项目的pro.file中。应用程序启动之前将加载库。如果10个程序使用静态库中的相同函数,则会将其加载到内存中10次。

为避免这种情况,可以使用动态链接。在这种情况下,可以隐式加载动态链接库(dll)(加载时链接,但在开始时引起混淆,有时也称为静态链接)或显式加载(运行时链接)。

构建dll时会创建导入库(.lib)和.dll。使用隐式链接,导入库不包含任何实际函数,但只包含指向dll的代码,它将像项目一样链接到项目(添加到.pro文件中)。链接器将信息添加到.exe以查找dll的位置。当programm启动时,系统使用.exe中的信息来尝试查找dll。如果找不到dll,则终止该程序。否则将函数从dll加载到内存中。

使用显式链接,编译器对dll一无所知,这将在运行时使用系统中的函数加载(Windows中的LoadLibrary),它通过文件名加载dll并返回一个句柄图书馆。然后可以使用句柄与GetProcAdress访问dll中的函数。是否有必要将.lib文件添加到.pro文件中?

我选择了隐式链接,只是因为它似乎更容易"对我来说。隐式链接dll还有其他优点吗?

0 个答案:

没有答案