据我了解,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'
为什么会这样?这只是尝试了解这些库,我可以继续使用第一种方法。有人可以对此有所了解吗?我错过了什么吗?