Кросскомпиляция приложений для Windows на Qt 4.5.1 из под Linux. |
Здравствуйте, гость ( Вход | Регистрация )
Кросскомпиляция приложений для Windows на Qt 4.5.1 из под Linux. |
Lampus |
24.5.2009, 2:38
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 24.5.2009 Пользователь №: 769 Спасибо сказали: 1 раз(а) Репутация: 0 |
Приветствую.
Прошу сильно не пинать за возможно довольно глупые вопросы. В общем ситуация такая, понадобилось мне одну мою поделку собрать под Windows. Я собрал кросскомпилятор на базе gcc-4.3.3, если более точно, то: BUILD=i486-slackware-linux HOST=i486-slackware-linux TARGET=i386-pc-mingw32 Собирал всё это дело в --prefix=/opt/crossdev/mingw32 В системе у меня установлена Qt-4.5.1, я с сайта троллей загрузил соотв. версию для win32, установил её под wine. Вытянул из установленого Qt папки include и src и положил их в /opt/crossdev/mingw32/include/qt и /opt/crossdev/mingw32/include/src соотв. Потом на базе спека win32-g++ сделал собственный win32-x-g++ такого содержания: Раскрывающийся текст # # qmake configuration for win32-x-g++ # # Written for MinGW # MAKEFILE_GENERATOR = MINGW TEMPLATE = app CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header QT += core gui DEFINES += UNICODE QT_LARGEFILE_SUPPORT QMAKE_COMPILER_DEFINES += __GNUC__ WIN32 QMAKE_EXT_OBJ = .o QMAKE_EXT_RES = _res.o QMAKE_CC = /opt/crossdev/mingw32/bin/i386-pc-mingw32-gcc QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 QMAKE_CFLAGS_DEBUG = -g QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CXX = /opt/crossdev/mingw32/bin/i386-pc-mingw32-g++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD QMAKE_CXXFLAGS_RTTI_ON = -frtti QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions QMAKE_INCDIR = /opt/crossdev/mingw32/include QMAKE_INCDIR_QT = /opt/crossdev/mingw32/include/qt QMAKE_LIBDIR_QT = /opt/crossdev/mingw32/lib QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< QMAKE_LINK = /opt/crossdev/mingw32/bin/i386-pc-mingw32-g++ QMAKE_LINK_C = /opt/crossdev/mingw32/bin/i386-pc-mingw32-gcc QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl QMAKE_LFLAGS_EXCEPTIONS_OFF = QMAKE_LFLAGS_RELEASE = -Wl,-s QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows QMAKE_LFLAGS_DLL = -shared QMAKE_LINK_OBJECT_MAX = 10 QMAKE_LINK_OBJECT_SCRIPT= object_script QMAKE_LIBS = QMAKE_LIBS_CORE = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 QMAKE_LIBS_NETWORK = -lws2_32 QMAKE_LIBS_OPENGL = -lopengl32 -lglu32 -lgdi32 -luser32 QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32 QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain #!isEmpty(QMAKE_SH) { MINGW_IN_SHELL = 1 QMAKE_DIR_SEP = / QMAKE_COPY = cp QMAKE_COPY_DIR = cp -r QMAKE_MOVE = mv QMAKE_DEL_FILE = rm -f QMAKE_MKDIR = mkdir -p QMAKE_DEL_DIR = rm -rf QMAKE_CHK_DIR_EXISTS = test -d #} else { # QMAKE_COPY = copy /y # QMAKE_COPY_DIR = xcopy /s /q /y /i # QMAKE_MOVE = move # QMAKE_DEL_FILE = del # QMAKE_MKDIR = mkdir # QMAKE_DEL_DIR = rmdir # QMAKE_CHK_DIR_EXISTS = if not exist #} QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc QMAKE_IDL = midl QMAKE_LIB = ar -ru QMAKE_RC = /opt/crossdev/mingw32/bin/i386-pc-mingw32-windres QMAKE_ZIP = zip -r -9 QMAKE_STRIP = strip QMAKE_STRIPFLAGS_LIB += --strip-unneeded load(qt_config) Изначальная версия выглядела так: Раскрывающийся текст # # qmake configuration for win32-g++ # # Written for MinGW # MAKEFILE_GENERATOR = MINGW TEMPLATE = app CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header QT += core gui DEFINES += UNICODE QT_LARGEFILE_SUPPORT QMAKE_COMPILER_DEFINES += __GNUC__ WIN32 QMAKE_EXT_OBJ = .o QMAKE_EXT_RES = _res.o QMAKE_CC = gcc QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 QMAKE_CFLAGS_DEBUG = -g QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CXX = g++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD QMAKE_CXXFLAGS_RTTI_ON = -frtti QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions QMAKE_INCDIR = QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< QMAKE_LINK = g++ QMAKE_LINK_C = gcc QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl QMAKE_LFLAGS_EXCEPTIONS_OFF = QMAKE_LFLAGS_RELEASE = -Wl,-s QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows QMAKE_LFLAGS_DLL = -shared QMAKE_LINK_OBJECT_MAX = 10 QMAKE_LINK_OBJECT_SCRIPT= object_script QMAKE_LIBS = QMAKE_LIBS_CORE = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 QMAKE_LIBS_NETWORK = -lws2_32 QMAKE_LIBS_OPENGL = -lopengl32 -lglu32 -lgdi32 -luser32 QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32 QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain !isEmpty(QMAKE_SH) { MINGW_IN_SHELL = 1 QMAKE_DIR_SEP = / QMAKE_COPY = cp QMAKE_COPY_DIR = xcopy /s /q /y /i QMAKE_MOVE = mv QMAKE_DEL_FILE = rm QMAKE_MKDIR = mkdir QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = test -d } else { QMAKE_COPY = copy /y QMAKE_COPY_DIR = xcopy /s /q /y /i QMAKE_MOVE = move QMAKE_DEL_FILE = del QMAKE_MKDIR = mkdir QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = if not exist } QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc.exe QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exe QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe QMAKE_IDL = midl QMAKE_LIB = ar -ru QMAKE_RC = windres QMAKE_ZIP = zip -r -9 QMAKE_STRIP = strip QMAKE_STRIPFLAGS_LIB += --strip-unneeded load(qt_config) А вот теперь к моим проблемам: 1) Из-за чего могут лезть эти предупреждения: Цитата In file included from /opt/crossdev/mingw32/include/qt/QtGui/qcolor.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qpalette.h:46, from /opt/crossdev/mingw32/include/qt/QtGui/qpalette.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qwidget.h:48, from /opt/crossdev/mingw32/include/qt/QtGui/qwidget.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/widgets/qframe.h:45, from /opt/crossdev/mingw32/include/qt/QtGui/qframe.h:1, from ../../src/qwt_plot.h:13, from moc/../bode_plot.h:1, from moc/moc_bode_plot.cpp:10: /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/painting/qcolor.h:241: warning: 'QDataStream& operator<<(QDataStream&, const QColor&)' redeclared without dllimport attribute: previous dllimport ignored /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/painting/qcolor.h:242: warning: 'QDataStream& operator>>(QDataStream&, QColor&)' redeclared without dllimport attribute: previous dllimport ignored In file included from /opt/crossdev/mingw32/include/qt/QtGui/qpainterpath.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/painting/qtransform.h:45, from /opt/crossdev/mingw32/include/qt/QtGui/qtransform.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/painting/qbrush.h:50, from /opt/crossdev/mingw32/include/qt/QtGui/qbrush.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qpalette.h:47, from /opt/crossdev/mingw32/include/qt/QtGui/qpalette.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qwidget.h:48, from /opt/crossdev/mingw32/include/qt/QtGui/qwidget.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/widgets/qframe.h:45, from /opt/crossdev/mingw32/include/qt/QtGui/qframe.h:1, from ../../src/qwt_plot.h:13, from moc/../bode_plot.h:1, from moc/moc_bode_plot.cpp:10: /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/painting/qpainterpath.h:233: warning: 'QDataStream& operator<<(QDataStream&, const QPainterPath&)' redeclared without dllimport attribute: previous dllimport ignored /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/painting/qpainterpath.h:234: warning: 'QDataStream& operator>>(QDataStream&, QPainterPath&)' redeclared without dllimport attribute: previous dllimport ignored In file included from /opt/crossdev/mingw32/include/qt/QtGui/qkeysequence.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qwidget.h:56, from /opt/crossdev/mingw32/include/qt/QtGui/qwidget.h:1, from /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/widgets/qframe.h:45, from /opt/crossdev/mingw32/include/qt/QtGui/qframe.h:1, from ../../src/qwt_plot.h:13, from moc/../bode_plot.h:1, from moc/moc_bode_plot.cpp:10: /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qkeysequence.h:199: warning: 'QDataStream& operator<<(QDataStream&, const QKeySequence&)' redeclared without dllimport attribute: previous dllimport ignored /opt/crossdev/mingw32/include/qt/QtGui/../../src/gui/kernel/qkeysequence.h:200: warning: 'QDataStream& operator>>(QDataStream&, QKeySequence&)' redeclared without dllimport attribute: previous dllimport ignored Хотелось бы найти причину и пофиксить, на край хотелось бы узнать каким -w флагом отключить эти предупреждения - глаза мозоля, хотя сборка приложений проходит успешно, они благополучно потом стартуют под wine. 2) При сборке dll библиотек в Makefile не появляется параметр -shared, хотя в спеке есть строчка "QMAKE_LFLAGS_DLL = -shared". Может что то в спеке начудил или что то нужно править в pro файле? (Вылезло при сборке qwt и qwtplot3d, пришлось руками Makefile править). 3) Вопрос немного не в тему. Когда запускаю Qt-приложения в wine, то не отображаются шрифты в окне, хоть ты тресни. Вроде в Qt приложениях используется Tahoma. Ставил и MS-овские шрифты инсталлятором и пытался подсунуть всю пачку виндовых - не помогло. Хотя запущенное под виндой приложение отображается нормально, да и другие не-Qt приложения под вайном смотрятся нормально - символы на месте. Может кто сталкивался? Спасибо за внимание. |
|
|
Litkevich Yuriy |
24.5.2009, 6:02
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Kagami |
24.5.2009, 8:59
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
По первому пункту могу сказать что это признанный баг mingw <= 4.2.1 - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34749 . Вроде к 4.4 обещали починить.
Используй mingw поставляемый с Qt (3.x) и все будет нормально Сообщение отредактировал Kagami - 24.5.2009, 9:05 |
|
|
Lampus |
24.5.2009, 12:15
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 24.5.2009 Пользователь №: 769 Спасибо сказали: 1 раз(а) Репутация: 0 |
Kagami, спасибо за наводку, тогда попробую пересобрать кросскомпилятор с патчем предложенным на багтрекере.
Хотелось бы ещё решить вопрос со сборкой dll (понять почему он для dll забывает параметр -shared при генерации Makefile с помощью qmake) и тогда моя душенька будет совсем довольна. |
|
|
Текстовая версия | Сейчас: 21.12.2024, 7:29 |