dlls:静态vs隐式链接,同样的事情?

时间:2013-11-01 16:37:07

标签: c++ dll

关于Dll链接,静态和隐式链接是一样的吗?

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

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

来自msft的这个link使用术语"隐式"对于我所听到的称为"静态"。它可能是一个特定于msft的东西吗?

2 个答案:

答案 0 :(得分:3)

是的,在Windows-land中,在讨论链接到DLL时,术语静态链接隐式链接是同义词。

Visual Studio documentation称之为:

  

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

在过去的日子里,Microsoft更喜欢使用术语隐式显式链接。如今他们似乎更喜欢条款load-time and run-time。同样,当人们谈论链接到DLL时,术语 static 意味着与隐式加载时间同义。

我试图避免在DLL链接方面使用 static ,原因如下:

  1. 很容易混淆链接到静态库。
  2. 一个人可能会静态地联系到一些充满活力的东西的想法只会让人感到矛盾。
  3. 术语静态已经被用来表示谁知道C和C ++语言中有多少不同的东西,我宁愿不要超过这个术语的重载!

答案 1 :(得分:2)

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

显式链接是指dlopen与动态库(.so,.dll)一起使用时。您没有使用指向库的链接编译程序,但是使用dlopen打开文件,并提取所需的功能。