Кросс-компиляция из MinGW на Fedora 12 для Windows - окно консоли? - PullRequest
4 голосов
/ 11 апреля 2010

После прочтения этой статьи http://lukast.mediablog.sk/log/?p=155 я решил использовать mingw на linux для компиляции приложений 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, который я тестировал. Теперь к вопросам:

  • Когда я запускаю приложение в Windows, тема не является темой 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 

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

Ответы [ 2 ]

3 голосов
/ 13 апреля 2010

Я подозреваю, что ваша тема связана с отсутствующим манифестом приложения

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

2 голосов
/ 13 апреля 2010

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

...