0

我的应用程序(C++,使用 Mingw 编译,主要使用 wxWidgets、Boost 和 SFML)在 Windows 7 或 Vista 上运行流畅,但在 Windows XP SP3 上无法正常运行。我有一个 .manifest 文件,它允许可执行文件使用 Windows XP/Vista/7 外观:

<?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 调试它,调试器会显示“正在启动程序:...”然后被阻止(Control+C 不起作用)。

我尝试在可执行文件上使用 Dependency Walker。
这是带有清单文件的日志:http: //pastebin.com/J6T8KBH8
(这里是没有清单的日志:http: //pastebin.com/zrYzRaWE / 在这种情况下,应用程序加载没有问题并且仍在运行在日志的末尾。)

我突出显示了 Dependency Walker 中以红色显示的行,它指的是 comctl32 中缺少的过程。此外,日志似乎被中断而没有特定错误。

您是否知道为什么在使用清单时应用程序似乎被中断,甚至没有崩溃或消息?

4

1 回答 1

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 库显示在列表的末尾

于 2010-12-24T13:10:37.587 回答