opengl-glut32丢失问题

来源:互联网 发布:腾讯视频软件下载 编辑:程序博客网 时间:2024/05/22 08:52
在vs2005中,首先将glut.h\gl.h\glu.h头文件放入..\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl中,
然后将三个库文件opengl32.lib\glu32.lib\glut32.lib放入..\Microsoft Visual Studio 8\VC\PlatformSDK\lib中,
然后再项目-properties->Configuration Properties->Linker->Input->Additional Dependencies中加入opengl32.lib\glu32.lib\glut32.lib三项,注意没有分号,
然后再程序中加入(一般都会有)#include “stdafx.h”
最后编译运行,但是windows提示“计算机中丢失glut32.dll”
 下面给出别人的最佳解答:
按照网上的步骤:


首先下载glut库:


http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip


下载后解压缩得到5个文件。


将下载的压缩包解开,将得到5个文件(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)


(1)把glut.h复制到x:\Program Files\Microsoft\Visual Studio 10.0\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。(x是你安装VS的盘符号)


(2)把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。


(3)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32)


 


如果是64位的系统,这样做了之后,程序能编译但运行时仍提示缺少glut.dll之类的。问题出在第三步。


这些dll都是32位系统下的,而64位系统的windows\system32下面的dll其实应该是64位的dll(应该叫system64更合适,可能是习惯和兼容性问题),而32位的dll应该放在C:\windows\syswow64文件夹下面。这个文件夹在32位系统中是没有的,这就是64位系统专门存放32位系统dll文件的路径。将glut.dll和glut32.dll拷贝到这个目录下面,程序可以正常运行了。


/*其实应该就是版本的问题,64位系统和32位系统在程序运行时查找相应的动态链接文件的路径不同,64位系统多了一个syswow64(可能有大小写不同)的文件夹,在程序运行后,64位系统主动去syswow64的文件夹内寻找所需要的dll文件。
其实system32该文件夹主要是为了在64位系统上运行32位的软件和程序正常运行使用的*/


网上的其他解释:
64位应用程序的第一条规则是:你绝对不能把32位和64位代码混和在同一个应用程序内。如果你有一个64位应用程序,所有与这个应用程序相关的东西,包括DLL文件,必须是64位的。这就有一个有趣的挑战,因为有时候很多应用程序都依靠一个共同的DLL文件。幸运的是,Windows保持32位的DLL文件和64位的DLL文件处于隔离状态。


理论上说,微软将要创建一个名为\Windows\System64的文件夹来用其存放64位DLL文件,但是取而代之的是,微软创建了一个新的名为SysWOW64的文件夹来存放32位的DLL文件。第一眼看起来,让人感觉这个文件夹应该存放64位应用程序的,但是注意,32位应用程序本来应该存放它们的DLL文件到\Windows\System32文件夹里面。 


  \Windows\System32文件夹在64位版本的Windows内仍然存在。但是微软使用这个文件夹做为64位DLL的仓库,而不是32位DLL文件的。我不清楚微软使用\Windows\System32文件夹来存放64位DLL的原因,但是我听说这么做是为了向下兼容性。


如我之前所提及的,32位代码不能默认在64位版本的Windows内运行。为了运行32位的应用程序,Windows使用WOW64 emulator,来让这些应用程序还认为它们在32位版本的Windows内运行。 


  当你安装一个32位的应用程序,安装向导通过WOW64 emulato运行。32位和64位代码并不混和。一旦一个应用程序(包括一个安装向导)从WOW64 emulator开始运行,它必须接着在WOW64内继续运行。这意味着当你安装一个应用程序,安装向导并不知道这个程序被安装到64位版本的Windows内,并且和它运行在32位操作系统一样把DLL文件写到\Windows\System32文件夹里面。 


  当然,WOW64知道安装向导通过emulator来运行的32位应用程序。同时也知道64和32位代码不能混合在一起。所以,WOW64 emulator 给\Windows\SysWOW64创建一个别名。这意味着任何时候32位应用程序要写入到\Windows\System32文件夹或者从\Windows\SysWOW64文件夹读取,WOW64 emulator都能使其改道到\Windows\SysWOW64文件夹。 


  所有这些都意味着如果你需要手动操作\Windows\System32文件夹内的内容,你可能要非常的麻烦。我最近了解到一个管理员需要安装一些小的支持脚本到一个已经安装的应用程序,这个脚本的指导上说明这些脚本需要被存放到\Windows\System32文件夹。当然这些脚本的说明假定这个应用程序是在32位操作系统上运行的。 


  这些脚本没有引起系统崩溃。然而Windows给人幻想永远不用进行更新。当管理员运行应用程序,它将被改道到\Windows\SysWOW64文件夹。管理员知道他自己把这些脚本放到\Windows\System32文件夹并且能通过Windows浏览器看到这些脚本,但是不能指出为什么应用程序不能看到这些脚本。考虑到这个问题是和权限相关的,他花费了一些时间来研究这个,所以知道了关于64位版本的Windows保存DLL文件隔离的方法,所以他能够把这些脚本放到\Windows\SysWOW64文件夹。 


/*其实也就是说,对于一个32位的程序来说,它默认把dll放到system32文件夹内,但实际上该dll被放到了syswow64文件夹下,而system32文件夹存放的是64位的dll文件,这样来保证系统的向下兼容。*/