gpt4 book ai didi

c++ - 应用程序在 vs2013 中工作,但在用作独立 exe 时显示工件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:45 24 4
gpt4 key购买 nike

我有一个用 C++/DirectX11 编写的地形生成引擎,我认为同样的问题,虽然没有解决,就像这个:

DirectX Release build works through VS2010, but not exe

简而言之:VS中的配置设置为默认 Release模式(平台x86)。但是,当我通过 VS 运行它时它工作正常,但当作为独立 exe 运行时显示奇怪的工件。但是,当我在配置中将运行时库设置为多线程调试 DLL(在 Release模式下)时,它甚至可以独立运行,但我不应该将调试 dll 放入发布中......这在使用静态链接时也会发生(多线程/MT)。因此,该应用程序可以在外部使用调试链接而不是发布。

来自 VS2013(正常):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(较旧的?),我实际上已经安装了可再发行组件包 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吗?

我一头雾水,不知道该多检查什么。可以给我一些东西吗?

最佳答案

我想到了两个区别:

  1. 从 VS 运行时,您可能仍在调试器中运行,进程可以检测到这一点。这很难诊断,而且不太可能。
  2. 从 VS 运行时,它可能具有与您预期不同的环境和工作目录,这可能导致路径无效并更改加载的 DLL 集。启动时,VS 在调试输出中显示加载的库及其路径。使用“depends.exe”独立运行可执行文件时,将这些与库进行比较。

请注意,使用调试 DLL 似乎可以解决问题这一事实表明您做错了什么,例如依赖未初始化变量的初始值。检查编译期间的所有警告,甚至可能提高警告级别。

关于c++ - 应用程序在 vs2013 中工作,但在用作独立 exe 时显示工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23578390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com