2010-04-10 1 views
4

После прочтения этой статьи http://lukast.mediablog.sk/log/?p=155 Я решил использовать mingw on linux для компиляции оконных приложений. Это означает, что я могу компилировать, тестировать, отлаживать и выпускать непосредственно из Linux.Перекрестное компиляция из MinGW на Fedora 12 в Windows - окно консоли?

Я взломал этот скрипт сборки, который перекроет компиляцию приложения и даже упакует его в ZIP-файл. Обратите внимание, что я использую исходные сборки для QMake (вы даже знали, что это поддерживается? Wow ...). Также обратите внимание, что сценарий автоматически вытащит необходимые библиотеки 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 я тестировал. Теперь на вопросы:

  • Когда я запускаю приложение в Windows, тема не является темой Windows7. Я предполагаю, что у меня отсутствует модуль стиля, я еще не уверен.
  • Приложение по какой-либо причине получает окно консоли.

Второй момент (окно консоли) имеет решающее значение. Как удалить это фоновое окно? Обратите внимание, что дополнительные строки конфигурации не работают для меня, что мне там не хватает?

Edit 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 

Переключатель -subsystem,windows добавляется только тогда, когда "CONFIG + = окна", и это не учитывается в других операционных системах. Я предполагаю, что порт QG MinGW запутывается «Я работаю в Linux, мне нужно игнорировать конфигурацию окон/консоли». Это означает, что мне нужно отредактировать соответствующий файл qmake.spec. arhg ... Я ненавижу ошибки. Мне все еще нужно проверить, что это устраняет проблему.

ответ

3

Я подозреваю, что ваша тема проблема является тэ результатом отсутствующего application manifest

Причина, по которой ваше приложение получает консоль просто. Приложения Windows поставляются в двух вариантах: консоли и графическом интерфейсе. Разница немного в PE-заголовке EXE. По умолчанию GCC - это создать консольное приложение, а e8johan объясняет, как изменить это (-Wl, -подсистема, окна). Там также есть некоторые дурачиться с точки входа (GUI, как ожидается, будут использовать WinMain(), а консольные приложения main()), но MinGW should take care of that

2

Возможно, вы сможете удалить ее, включив -Wl,-subsystem,windows. This article показывает, как, но вы хотите заменить -mwindows на -Wl,-subsystem,windows, чтобы избежать использования устаревшей функции gcc.