3

据我了解,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 和 freeglut.dll 放在 sysWoW64 文件夹中来使我的代码工作。这对我有用,我知道这是最有效的方法。

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

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

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

4

1 回答 1

1

我认为标题将尝试以任何方式使用 freeglut.lib 。您必须指定您喜欢使用静态版本。

#define FREEGLUT_STATIC

(对于 GLUT 也是如此)

这是一篇讨论同一问题的博客文章:http://mattfife.com/?p= 226

于 2014-01-24T13:43:55.237 回答