Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 关于静态库和DLL_Windows_Visual Studio 2010_Dll_Static Libraries_Freeglut - Fatal编程技术网

Windows 关于静态库和DLL

Windows 关于静态库和DLL,windows,visual-studio-2010,dll,static-libraries,freeglut,Windows,Visual Studio 2010,Dll,Static Libraries,Freeglut,据我所知,DLL是在运行时动态加载的,而静态库(.lib文件)是在链接期间加载的。我还了解到有两种类型的.lib文件。一个是static.lib文件,这意味着在链接过程中,这些文件将与我编写的代码链接。另一种类型的.lib文件是简单的导入文件,它只告诉链接器.dll文件的路径,这些文件可能位于system32或sysWoW64文件夹中。我的理解正确吗 现在我对整个.lib和.dll文件系统的工作原理没有什么疑问 我编译了freeglut库,在lib文件夹中有3个重要文件。freeglut.lib

据我所知,DLL是在运行时动态加载的,而静态库(.lib文件)是在链接期间加载的。我还了解到有两种类型的.lib文件。一个是static.lib文件,这意味着在链接过程中,这些文件将与我编写的代码链接。另一种类型的.lib文件是简单的导入文件,它只告诉链接器.dll文件的路径,这些文件可能位于system32或sysWoW64文件夹中。我的理解正确吗

现在我对整个.lib和.dll文件系统的工作原理没有什么疑问

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

我可以将freeglut.lib放在C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\lib中,将freeglut.dll放在sysWoW64文件夹中,从而使代码正常工作。这对我很有效,我知道这是最有效的方法

当我尝试使用freeglut-static.lib时,它不会编译。我将freeglut-static.lib放在C:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\lib中(我从这里删除了freeglut.lib),并在项目属性>链接器>输入>其他依赖项中添加了freeglut-static.lib。然而VisualStudio一直在说

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

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

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

#define FREEGLUT_STATIC
(供过于求也是如此)


这里有一篇博客文章似乎也谈到了同样的问题:

当你想使用freeglut-static.lib时,你必须删除引用freeglut.lib的旧link命令。错误消息似乎表明您正试图链接到这两个目录。@ScottMcP MVP我正在这样做。我正在从链接器选项中删除freeglut.lib&仅添加freeglut-static.lib,并且正在从lib目录中删除freeglut.lib。但错误依然存在。