据我理解,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),并在项目属性>链接器>输入>附加依赖项中添加了freeglut-static.lib。然而,Visual Studio一直显示:
现在我对整个.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),并在项目属性>链接器>输入>附加依赖项中添加了freeglut-static.lib。然而,Visual Studio一直显示:
'LINK : fatal error LNK1104: cannot open file 'freeglut.lib'
为什么会这样呢?这只是学习库的尝试,我可以继续使用第一种方法。有人可以给出见解吗?我错过了什么吗?