如何链接需要rsrc部分和comctl32.dll的64位可执行文件?

如何链接需要rsrc部分和comctl32.dll的64位可执行文件?

问题描述:

试图构建UltraDefrag。如何链接需要rsrc部分和comctl32.dll的64位可执行文件?

听起来相当简单,但只要将rc.o添加到二进制文件的链接对象中,就会使用32位版本的comctl32.dll在程序启动时触发0xc0000007错误。

这是一个已知的bug mingw64,但错误没有答复自2011年以来,我需要为这个一种解决方法(该程序需要不使用cygwin.dll,所以我不能用cygwin)

任何想法?

+0

如果这是一个已知的错误,你应该提供一个知道它的位置的链接 – jturney

+1

它确实是MinGW-w64工具链的一个通用问题,你应该能够生成一个简单的测试用例。 – jturney

+0

@jturney:http://permalink.gmane.org/gmane.comp.gnu.mingw.announce/3311 – user2284570

即清单包含

<dependentAssembly> 
<assemblyIdentity 
    type="win32" 
    name="Microsoft.Windows.Common-Controls" 
    version="6.0.0.0" 
    processorArchitecture="x86" 
    publicKeyToken="6595b64144ccf1df" 
    language="*" 
/> 

这可能发生,如果application manifest明确规定了通用控件

的32位版本,您需要将ProcessorArchitecture用于更改为:

processorArchitecture="*" 

如果这是你问题的原因,这不是MinGW-w64的错误。

+0

OK,还有默认情况下,该项目包括一个清单,确实如此。 – user2284570

+0

当你试着以错误的清单您的64位应用程序,你也可能得到错误'应用程序无法正常启动(0xc000007b)。单击确定关闭application.'和异常'未处理的异常在0x000007F8EE9C1E80(ntdll.dll中)在MyApp.exe中:0xC000007B:%HS要么没有设计在Windows上运行,或者它包含一个错误。尝试使用原始安装介质重新安装程序,或与系统管理员或软件供应商联系以获得支持。错误状态0x.' – izogfif