【问题标题】:dlls: static vs implicit linking, same thing?dll:静态与隐式链接,同样的事情吗?
【发布时间】:2013-11-01 16:37:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您从哪里听说过“隐式链接”这个词?我还没有听说过。
  • @Nawaz here's an example 来自 M$,这表明这是正确的术语。也许这是 M$ 与其他所有人的区别?不确定。这就是我问的原因,因为我认为它们是一样的。
  • 哦,我明白了。 msdn 链接很好地解释了这些术语。所以我想知道你现在有什么疑问?
  • @ash 您应该将该链接添加到问题中,这不是日常术语。
  • @ash:Implicit linking is sometimes referred to as static load or load-time dynamic linking. Explicit linking is sometimes referred to as dynamic load or run-time dynamic linking.第一句话回答了你的问题。

标签: c++ dll


【解决方案1】:

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

Visual Studio documentation 大声疾呼:

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

在过去的日子里,Microsoft 更喜欢使用术语 implicitexplicit 链接。如今,他们似乎分别更喜欢术语load-time and run-time。尽管如此,当人们谈论链接到 DLL 时,术语 static 的意思是 implicitload-time 的同义词。

我尝试避免使用与 DLL 链接相关的 static 有几个原因:

  1. 链接到静态库很容易混淆。
  2. 人们可能会静态地链接到动态的东西的想法让人觉得自相矛盾。
  3. 术语静态已经被用来表示谁知道 C 和 C++ 语言中有多少不同的东西,我宁愿不再重载这个术语!

【讨论】:

    【解决方案2】:

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

    显式链接是当您将dlopen 与动态库(.so、.dll)一起使用时。您不使用库的链接编译程序,而是使用dlopen 打开文件,然后提取所需的函数。

    【讨论】:

    • +1。这里的 Windows 怪癖是 DLL 带有一个静态库 (.lib);您链接到静态库,它为调用 DLL 提供了挂钩。我认为这就是“隐式”链接的含义。叹息。
    • @PeteBecker 我很同情你的叹息。我发现您可以将静态链接到动态链接库的整个想法是一个完整的矛盾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多