2010-06-29 81 views
3

我在Windows上使用Qt 4.6.3和MinGW来构建Qt应用程序,现在需要将COM接口添加到我的应用程序中。我启用了ActiveQt,但因为丢失了MIDL编译器的副本,导致后链接错误。我下载了最新的MS Windows SDK的副本,其中包括MIDL,但现在MIDL抱怨它无法找到cl.exe。我可以得出的唯一结论是,您只能使用MS编译器构建ActiveQt应用程序,而我宁愿避免这种情况。是否可以与MinGW合作?或者我运气不好?使用MinGW构建ActiveQt(COM)应用程序

回答

2

使用MS编译器和工具似乎是实现这种工作的唯一可靠方法。

1

那么,你可以使用MinGW来构建ActiveQt,但在其上使用一堆COM的东西可能是不可能的,因为它可能会或可能不会出现在MinGW中。一些想法:

  1. 使用任何MS SDK工具使用MinGW是不行的(例外是mingw.org + DXSDK应该工作的大部分时间)。

  2. 您确定在编译时链接了所有必需的库吗?如果你不显示确切的错误信息,我无法提供更多帮助。

  3. mingw-w32/w64 project试图提供一个完整的“Windows SDK for GCC”;它可能包含您正在查找的库/文件。他们提供了一个x64和x86编译器,以及相当不错的DX支持。我对他们的COM没有经验,但我相信它会比mingw.org更完整。您可以随时联系论坛或邮件列表中的开发人员,他们非常有帮助。

+0

该应用程序链接正常。这是启动MIDL的后链接阶段,这是问题 - MIDL需要cl.exe(MS编译器)。 – Rob 2010-06-29 12:07:33

1

你可以试试midl的wine实现,widl。有关在Windows上构建的信息,请参阅Wine wiki page

如果您想快速运行,请获取wine-prgs-0.9.14-mingw.zip并查看它是如何工作的。

0

我已经解决了这个问题,接下来的方式:

了QtCreator,Msys2和VS2015安装社区。

启动Qt Creator的与批处理脚本:

@echo off 
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 8.1 

setlocal 
set MSYSTEM=MINGW32 
set MSYS2_PATH_TYPE=inherit 
start "" "C:\msys64\usr\bin\mintty" -i /msys2.ico -e /usr/bin/bash --login -c "/c/Qt/Tools/QtCreator/bin/qtcreator.exe" 

exit /b 0 

我启动QtCreator出Msys2 envioronment的,因为它提供了构建第三方在我的项目需要非标准的Unix工具。 因此理论上这并不是强制要求Msys2。

请注意:不使用WinSDK 10.0(或以上版本),因为它没有PATH变量中的midl.exe。

这样做会创建PATH环境变量与Qt Creator的最高优先级(所以你会使用gcc从Qt安装),Msys2下一个(所以你可以使用标准的Unix工具)和MSVC和WinSDK 8.1在最后的地方(所以而建立你会发现midl编译器)。

现在我成功构建dll并将其传递给midl形式的WinSDK,但至今我仍然试图在系统中注册它。