Visual Studio:lib文件究竟是什么(用于)?

时间:2010-03-03 21:21:54

标签: c++ visual-studio

我正在学习C ++并且遇到了链接器显然使用的那些* .lib文件。我不得不为OpenGL设置一些额外的依赖项。

  • 此上下文中的库文件到底用于什么?
  • 他们的内容是什么?
  • 他们是如何产生的?
  • 还有什么值得了解的吗?

或者它们只是与* .obj文件类似的可重定位目标代码?

3 个答案:

答案 0 :(得分:8)

简单来说,是 - .lib文件只是.obj文件的集合。

Windows上有一个轻微的复杂功能,你可以有两类lib文件 静态lib文件基本上包含.obj的集合,并与您的程序链接以提供.lib中的所有函数。它们主要是为了节省你有多少文件来处理它们。

还有stub .lib,它只提供.dll文件中包含的函数的定义。 .lib文件在编译时用于告诉编译器对函数的期望,但代码是在运行时从dll加载的。

答案 1 :(得分:1)

.lib文件是“库”,包含编译代码的“集合”,可以说。因此,这是一种提供软件组件的方法,而不会泄露内部源代码。它们可以像“可执行文件”一样生成“构建”的“输出”。

具体内容取决于您的平台/开发环境,但它们将包含链接器的符号,以“挂接”由例如提供的函数调用。库的头文件。

有些库是“动态的”(Windows上的.DLL),这意味着在加载使用库的可执行文件时会设置函数调用的“钩子”,允许在不重建可执行文件的情况下更改库实现。 / p>

最后一件事。你说你正在学习C ++,而一个常见的混淆点是,C ++编译器生成的“符号”被“修改”(为了允许例如函数重载),并且这种“修改”在不同的编译器中没有标准化,所以库通常使用C作为库的“API”(就像OpenGL一样),即使库可以在内部用C ++实现。

我希望对.lib文件有所了解。快乐的OpenGL编码: - )

答案 2 :(得分:1)

  

这里的库文件究竟是什么   上下文用于?

它们与您的可执行文件一样是编译和链接的代码。它们被称为静态库,其他程序可以在编译时链接到这些库。在OpenGL的情况下,您链接到他们的库以构建可以运行OpenGL代码的可执行文件。动态库(DLL)是可执行文件链接的另一种类型的库,除了在运行时。

  

他们的内容是什么?

静态库包含链接对象代码,就像exe一样。 * .obj文件是编译器为链接器生成的目标代码。

  

他们是如何产生的?

当编译器创建目标文件时,它会将工作传递给链接器。您可以在开发环境中创建它们,就像可执行文件一样。

  

还有什么值得了解的吗?   关于他们?

是的,它们在任何地方都被使用,所以习惯它们并没有什么坏处。