VS2012寻找64位dll而不是32位

时间:2013-11-30 15:45:02

标签: c++ opengl visual-studio-2012 freeglut

我在设置opengl项目时遇到问题。我正在关注这个tutorial。我能够在没有错误或警告的情况下构建它,但是当我执行它时,我得到0xc000007b错误。

似乎我的Win32应用程序尝试在C:\ Windows \ SysWOW64中加载64位freeglut.dll,因为当我从C:\ Windows \ SysWOW64中删除它时出现错误:程序'[3124] Project1.exe'有退出代码-1073741515(0xc0000135)'找不到依赖的dll'。

同样在输出中我可以看到:

'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ ntdll.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ kernel32.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ KernelBase.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ opengl32.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ msvcrt.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ advapi32.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ sechost.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ rpcrt4.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ sspicli.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ cryptbase.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ gdi32.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ user32.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ lpk.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ usp10.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ glu32.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ ddraw.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ dciman32.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ setupapi.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ cfgmgr32.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ oleaut32.dll'。符号已加载。
'Project1.exe'(Win32):加载'C:\ Windows \ SysWOW64 \ ole32.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ devobj.dll'。符号已加载。
'Project1.exe'(Win32):已加载'C:\ Windows \ SysWOW64 \ dwmapi.dll'。符号已加载。

我该怎么办?谢谢

编辑:直接在visual studio 2012中粘贴32位dll \ Projects \ Project1 \ Debug修复了这个问题!为什么不应用程序查看库的C:\ Windows \ System32文件夹?

1 个答案:

答案 0 :(得分:4)

SysWOW64中的内容不是64位。这些是用于Windows上的Windows的DLL(Microsoft的32位转换层)。基本上你有一个64位版本的Windows,它就是存储32位DLL的地方。

你真的把它倒在脑后,信不信由你。 64位DLL驻留在64位系统上的C:\Windows\System32中,听起来很奇怪。微软可能已经打算使用System64,但是很多软件被硬编码使用System32Win32,而32几乎没有任何意义。

如果要将freeglut DLL放在单个中心位置,请将其放在工作目录中Microsoft Visual Studio配置为从中运行项目。您可以按照提到的那样将它放在Project1\Debug中,但这意味着您还需要在Project1\Release中放置一个freeglut副本,以使您的软件在发布版本中正常运行。 Visual Studio实际上在项目配置中有一个单独的工作目录(“Debugger | Working Directory”),它会在你按“执行”或“调试”时运行你的程序 - 这是你的freeglut DLL应该进入的目录以避免必须在每个构建配置的输出目录中放置一个副本。

运送软件时,请将其放在与.exe相同的目录中,但是为了开发,请利用项目的工作目录。在任何情况下,除非您知道自己在做什么,否则不应将DLL放入操作系统目录中。您需要具有管理员权限才能将任何内容写入您提到的任一目录。


事实上,您链接的教程的作者需要因不正确地解释System32SysWOW64的功能而被谴责,并建议您将DLL安装到这两个位置中的任何一个位置。