关于静态库和dll

时间:2013-06-10 18:56:13

标签: windows visual-studio-2010 dll static-libraries freeglut

根据我的理解,dll在运行时动态加载,并且在链接期间加载静态库(.lib文件)。我也明白有两种类型的.lib文件。一个是静态.lib文件,这意味着在链接期间这些文件将与我编写的代码链接。另一种类型的.lib文件只是导入文件,它只告诉链接器.dll文件的路径可能位于system32或sysWoW64文件夹中。我的理解是否正确?

现在我对.lib和.dll文件的整个系统如何工作毫无疑问。

我编译了freeglut库,在lib文件夹中我有3个重要文件。 freeglut.lib,freeglut-static.lib和freeglut.dll。 我假设freeglut.lib是一个导入库,因为它只有36KB大小。 我还假设freeglut-static.lib是一个大小约为2MB的静态库。

我可以通过将freeglut.lib放在C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Lib和sysWoW64文件夹中的freeglut.dll中来使我的代码工作。这对我有用,我理解这是最有效的方式。

当我尝试使用freeglut-static.lib时,它无法编译。我将freeglut-static.lib放在C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Lib(我从这里删除了freeglut.lib)并在Project properties> linker> input&gt中添加了freeglut-static.lib ;其他依赖项。然而,visual studio一直在说

'LINK : fatal error LNK1104: cannot open file 'freeglut.lib'

为什么会这样?这只是尝试了解库,我可以继续使用第一种方法。有人可以深入了解这个吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我认为标题会尝试使用freeglut.lib。您必须指定您要使用静态版本。

#define FREEGLUT_STATIC

(GLUT也一样)

以下是一篇博文,其中有关于同一问题的讨论:http://mattfife.com/?p=226