我的应用程序(使用Mingw编译的C ++,主要使用wxWidgets,Boost和SFML)在Windows 7或Vista上运行顺畅,在Windows XP SP3上无法正常运行。我有一个.manifest文件,允许可执行文件使用Windows XP / Vista / 7 look'n'feel:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="Game Develop Editor.Release - Edittime.App"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>Executable</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
如果我删除/重命名清单文件,我可以使用Windows XP SP3启动可执行文件(但是使用丑陋的过时控件)。如果我使用清单文件,它运行没有Vista / 7但是使用Windows XP SP3,应用程序加载到内存中(我可以在任务管理器中看到它)但什么都不做。没有错误消息,它甚至没有崩溃。
如果我重新编译它以显示控制台,后者不会显示任何内容。
如果我使用gdb进行调试,调试器会显示“Starting program:...”然后被阻止(Control + C不起作用)。
我尝试在可执行文件上使用Dependency Walker
这是包含清单文件的日志:http://pastebin.com/J6T8KBH8
(这是没有清单的日志:http://pastebin.com/zrYzRaWE /在这种情况下,应用程序加载没有问题,并且仍然在日志的末尾运行。)
我突出显示了Dependency Walker中以红色显示的行,它指的是comctl32中缺少的过程。此外,日志似乎被中断而没有特定错误。
您是否知道为什么应用程序在使用清单时甚至没有崩溃或消息就会被中断?
答案 0 :(得分:0)
事实证明,只有在使用最新版本的SFML库时才会出现问题。 确切地说,SFML库名称在最近的版本中已从“sfml-xxx.dll”更改为“sfml-xxx-2.dll”。
使用新名称链接到最新版本的库时,应用程序不希望在Windows XP SP3上启动。我已经调整了用于编译SFML的CmakeList.txt文件,以便使用库的旧名称(sfml-xxxx.dll),并且在链接到这些库时,程序可以正常工作。 不同的唯一的东西是库名称。但是,在Dependency Walker中,我看到当使用新名称(sfml-xxxx-2.dll)时,SFML库在之前 wxWidgets和windows相关库中呈现。当我使用旧名称(sfml-xxxx.dll)时,SFML库在列表的末尾显示。