4

关于 Dll 链接,静态链接和隐式链接是一回事吗?

我理解隐式和显式链接之间的区别,我认为静态是隐式的同义词,但不确定。

如果它们确实不同,它们之间有什么区别,我如何指定我想要哪一个?

msft 的这个链接使用术语“隐式”来表示我听说的“静态”。它可能是特定于 msft 的东西吗?

4

2 回答 2

4

是的,在 Windows 领域,当讨论链接到 DLL 时,术语静态链接隐式链接是同义词。

Visual Studio 文档指出了这一点:

隐式链接有时称为静态加载或加载时动态链接。显式链接有时称为动态加载或运行时动态链接。

在过去的日子里,微软更喜欢隐式显式链接这两个术语。如今,他们似乎分别更喜欢术语load-timerun-time。同样,当人们谈论链接到 DLL 时,术语静态手段是隐式加载时间的同义词。

出于以下几个原因,我尝试避免使用与 DLL 链接相关的静态:

  1. 链接到静态库很容易混淆。
  2. 一个人可能静态地链接到动态的东西的想法让人觉得矛盾。
  3. 术语静态已经被用来表示谁知道 C 和 C++ 语言中有多少不同的东西,我宁愿不再重载这个术语!
于 2013-11-01T16:57:17.837 回答
2

可以使用静态 (.a) 或动态库 (.so、.dll) 完成隐式链接。当你编译一个带有库链接的程序时,它是一个隐式链接。它比显式链接更快。

显式链接是当您使用dlopen动态库(.so、.dll)时。您无需使用库的链接来编译程序,而是使用dlopen打开文件并提取所需的功能。

于 2013-11-01T16:40:58.727 回答