我有一个用C ++ / DirectX11编写的地形生成引擎,我认为同样的问题虽然没有解决,但是像这一个:
DirectX Release build works through VS2010, but not exe
简要说一下:VS中的配置设置为默认发布模式(平台x86)。但是,当我通过VS运行它时它可以正常工作,但是当作为独立的exe运行时显示奇怪的工件。但是,当我将运行时库配置为多线程调试DLL(在发布模式下)时,它甚至可以作为独立工作,但是我不应该将调试dll放入发布...这也会在使用静态时发生链接(多线程/ MT)。因此,应用程序可以在调试链接之外使用,但不能在发布时使用。
来自VS2013(ok):http://i838.photobucket.com/albums/zz306/jajcek/artifacts_isok_zps69abbb9f.png
作为独立的exe(不好):http://i838.photobucket.com/albums/zz306/jajcek/artifacts_zpsfd28d68b.png
我在想它可能是依赖关系,所以我从Dependency Walker看了它,但它显示了我的错误("找不到文件"):
API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
DCOMP.DLL
IESHIMS.DLL
这引出了我的主题,这个主题解释了它们只是误导:Win 7, 64 bit, dll problems
也许作为独立的应用程序,exe采用了错误的dll(较旧的?),我实际上已经安装了Redistributable软件包2005,2008,2010,2012(一次性),甚至尝试安装2013年没有帮助我。我还从控制面板中删除了所有这些(从最旧的开始逐个),应用程序仍然运行,但是再次使用工件。
我甚至试图将DLL复制到我运行exe的目录中。 DLL列表取自VS调试窗口:
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\d3d11.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dxgi.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Cannot find or open the PDB file.
'3d_engine.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dxgidebug.dll'. Cannot find or open the PDB file.
// omitted
但正如你认为它没有工作......
VS2013运行时对应用程序做了什么?它不只是从Release目录运行exe吗?
我完全糊涂了,不知道应该多检查一下。你能给我任何一件好事吗?
答案 0 :(得分:1)
我想到了两个不同之处:
请注意,使用调试DLL似乎可以解决问题,这表明您正在做错事,例如依赖未初始化变量的初始值。在编译期间检查所有警告,甚至可能提高警告级别。