阅读本文http://lukast.mediablog.sk/log/?p=155后,我决定在linux上使用mingw来编译windows应用程序。这意味着我可以直接从Linux编译,测试,调试和发布。
我攻击了这个构建脚本,它将交叉编译应用程序,甚至将其打包成ZIP文件。请注意,我正在使用QMake的源代码构建(您是否知道这是支持的?哇......)。另请注意,该脚本将自动提取所需的DLL。以下是您使用和滥用所有互联网的脚本:
#! /bin/sh
set -x
set -e
VERSION=0.1
PRO_FILE=blabla.pro
BUILD_DIR=mingw_build
DIST_DIR=blabla-$VERSION-win32
# clean up old shite
rm -fr $BUILD_DIR
mkdir $BUILD_DIR
cd $BUILD_DIR
# start building
QMAKESPEC=fedora-win32-cross qmake-qt4 QT_LIBINFIX=4 config=\"release\ quiet\" ../$PRO_FILE
#qmake-qt4 -spec fedora-win32-cross
make
DLLS=`i686-pc-mingw32-objdump -p release/*.exe | grep dll | awk '{print $3}'`
for i in $DLLS mingwm10.dll ; do
f=/usr/i686-pc-mingw32/sys-root/mingw/bin/$i
if [ ! -f $f ]; then continue; fi
cp -av $f release
done
mkdir -p $DIST_DIR
mv release/*.exe $DIST_DIR
mv release/*.dll $DIST_DIR
zip -r ../$DIST_DIR.zip $DIST_DIR
已编译的二进制文件在我测试的Windows7机器上运行。现在回答问题:
第二点(控制台窗口)至关重要。如何删除此背景窗口?请注意,额外的配置行对我不起作用,我在那里错过了什么?
编辑1(计划一些):
编译行是:
i686-pc-mingw32-g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -o release/font_export.exe object_script.font_export.Release -L"/usr/i686-pc-mingw32/sys-root/mingw/lib" -lQtGui4 -lQtCore4
仅在“CONFIG + = windows”时添加-subsystem,windows
开关,并且在其他操作系统中忽略此开关。我的猜测是Qt的MinGW端口感到困惑“我在Linux上运行,我需要忽略windows / console配置”。这意味着我需要编辑相应的qmake.spec文件。 arhg ...我讨厌虫子。我仍然需要验证这可以解决问题....
答案 0 :(得分:3)
我怀疑您的主题问题是缺少application manifest
的结果您的应用获得控制台的原因很简单。 Windows应用程序有两种版本,Console和GUI。区别在于EXE的PE头。 GCC的默认设置是生成一个Console应用程序,e8johan解释了如何更改它(-Wl,-subsystem,windows)。还有一些关于入口点的愚蠢(GUI应该使用WinMain()
和控制台应用main()
)但是MinGW should take care of that
答案 1 :(得分:2)
您可以通过添加-Wl,-subsystem,windows
来删除它。 This article显示了如何,但您希望将-mwindows
替换为-Wl,-subsystem,windows
,以避免使用gcc的弃用功能。