2010-12-21 2 views
0

Windows 7 또는 Vista에서 원활하게 실행되는 내 응용 프로그램 (C++, Mingw으로 컴파일, 주로 wxWidgets, Boost 및 SFML 사용)이 Windows XP에서 제대로 작동하지 않습니다. SP3.응용 프로그램이 XP SP3 및 comctl32 관련 매니페스트로로드되지 않습니다.

<?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> 

내가 매니페스트 파일의 이름을 변경/제거하면, 나는 윈도우 XP SP3와 실행 파일을 실행할 수 있습니다 (: 나는 실행 파일이 윈도우 XP/Vista/7 look'n'feel 사용할 수있는 별도로 .manifest 파일이 하지만 추악한 구식 컨트롤 포함). 내가 매니 페스트 파일을 보자면 Vista/7에서는 문제없이 실행되지만 Windows XP SP3에서는 응용 프로그램이 메모리에로드되지만 (작업 관리자에서 볼 수는 있지만) 아무 것도하지 않습니다. 오류 메시지가 없으며 충돌도 발생하지 않습니다.

콘솔을 표시하도록 콘솔을 다시 컴파일하면 콘솔에 아무 것도 표시되지 않습니다.

gdb를 사용하여 디버깅하는 경우 디버거가 "Starting program : ..."을 표시하고 차단됩니다 (Control + C가 작동하지 않음).

실행 파일에 종속성 워커를 사용하려고했습니다. http://pastebin.com/J6T8KBH8
:
여기 는 매니페스트 파일과 로그입니다 (여기에 매니페스트없이 로그입니다. http://pastebin.com/zrYzRaWE가 /이 경우, 응용 프로그램이 문제없이로드 여전히 로그의 끝에서 실행이)

Dependency Walker에서 빨간색으로 표시된 행을 강조 표시했습니다.이 행은 comctl32에서 누락 된 프로 시저를 나타냅니다. 또한 로그는 특정 오류없이 중단 된 것 같습니다.

매니페스트를 사용할 때 응용 프로그램이 중단되거나 메시지가 표시되지 않고 중단 된 것처럼 보이는 이유는 무엇입니까?

답변

0

최신 버전의 SFML 라이브러리를 사용하는 경우에만 문제가 발생한다는 것이 밝혀졌습니다. 최근 릴리스에서는 SFML 라이브러리 이름이 "sfml-xxx.dll"에서 "sfml-xxx-2.dll"로 변경되었습니다.

새 이름으로 라이브러리의 최신 버전에 연결할 때 응용 프로그램은 Windows XP SP3에서 시작하지 않으려 고합니다. 라이브러리 (sfml-xxxx.dll)에 대한 이전 이름을 사용하기 위해 SFML을 컴파일하는 데 사용되는 CmakeList.txt 파일을 수정했으며 이러한 라이브러리에 연결할 때 프로그램이 완벽하게 작동합니다. 이 유일한 것은 라이브러리 이름입니다. 그러나 Dependency Walker에서 새 이름 (sfml-xxxx-2.dll)을 사용하면 , wxWidgets 및 windows 관련 라이브러리보다 SFML 라이브러리가 제공되는 것을 보았습니다. 이전 이름 ​​(sfml-xxxx.dll)을 사용하면 SFML 라이브러리의 끝에이 으로 표시됩니다.

관련 문제