Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Danila_Bagrofff от Апрель 13, 2009, 13:31



Название: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 13:31
Впервые решил попробовать пересобрать приложение, работающее в линуксе, в винду на QtCreator'е. Но что-то не очень успешно.
Как-то с про-файлами раньше не работал. make-файл в линуксе проблем нет составить. Но что надо прописывать в pro-файл, чтобы правильно откомпилировать? Само, собой, никакие линукс-библиотеки в приложении не используются. Только голый c++ и qt.

Но что-то не очень компилится. В чем проблема? Можете посмотреть?


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Rcus от Апрель 13, 2009, 13:42
А как именно не компилится? на Qt SDK 2009.01 (WinXP) все работает (только пара предупреждений).


Название: Re: Перевод приложения с Linux на Windows
Отправлено: spirit от Апрель 13, 2009, 13:47
студией собрал, работает, собрал Qt SDK тоже, пару ворнингов было и все.


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 14:01
А как именно не компилится? на Qt SDK 2009.01 (WinXP) все работает (только пара предупреждений).

предупреждения - фиг с ними. а вот что выдает компилятор:

Цитировать
Running build steps for project drag...
Creating gdb macros library...
Configuration unchanged, skipping QMake step.
Starting: C:/Qt/2009.01/mingw/bin/mingw32-make.exe debug -w
mingw32-make: Entering directory `C:/drag'
C:/Qt/2009.01/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/drag'
g++ -c -g -Wall -frtti -fexceptions -mthreads -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\Qt\2009.01\qt\include\QtCore" -I"..\Qt\2009.01\qt\include\QtGui" -I"..\Qt\2009.01\qt\include" -I"..\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"..\Qt\2009.01\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\grag.exe debug/dialog.o debug/main.o debug/moc_dialog.o  -L"c:\Qt\2009.01\qt\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4
mingw32-make[1]: Leaving directory `C:/drag'
mingw32-make: Leaving directory `C:/drag'
Exited with code 0.

правда собираю тут:
Цитировать
Qt Creator 1.0.0
Based on Qt 4.5.0

Built on Feb 27 2009 at 09:34:37


Copyright 2008-2009 Nokia Corporation. All rights reserved.

The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

или не тем собираю?


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Rcus от Апрель 13, 2009, 14:07
Вывод сообщений показывает что компиляция и линковка прошли успешно...


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 14:13
хм, а почему тогда не запускается приложение?

в папке debug нашел файл: grag.exe, но при запуске:
Цитировать
Starting ...

The process could not be started!

А через оконный менеджер:
Цитировать
Приложению не удалось запуститься, поскольку mingwm10.dll не был найден. Повторная установка приложения ...

Ща попробую переустановить, но что-то с трудом верится, что это поможет запустить приложение.


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 14:26
не помогло. все тоже. может, что-то не так устанавливаю?

у меня один исходный файл: qt-sdk-win-opensource-2009.01.exe

Вроде в него все вшито. Или чего-то может не хвататать?

Может, вы юзаете более позднюю версию?


Название: Re: Перевод приложения с Linux на Windows
Отправлено: m_ax от Апрель 13, 2009, 14:46
Цитировать
Приложению не удалось запуститься, поскольку mingwm10.dll не был найден. Повторная установка приложения ...

Вам нужно положить mingw10.dll вместе с exe шником. Возможно, если у вас Qt собрана не статиком то потребуются также и QtGui, QtCore ... ну и что вы там использовали...


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 14:51
Вам нужно положить mingw10.dll вместе с exe шником. Возможно, если у вас Qt собрана не статиком то потребуются также и QtGui, QtCore ... ну и что вы там использовали...

Так, как-то странно получается... мне что, придется каждый раз класть либу к exe-нику?? как-то нелогично.
У меня только исходный exe-ник со всей приблудой qt. Я не могу внести никакие изменения в сборку.

Мне, может, где-то другую версию попробовать скачать?...


Название: Re: Перевод приложения с Linux на Windows
Отправлено: m_ax от Апрель 13, 2009, 14:57
Цитировать
Так, как-то странно получается... мне что, придется каждый раз класть либу к exe-нику?? как-то нелогично.
У меня только исходный exe-ник со всей приблудой qt. Я не могу внести никакие изменения в сборку.

А по-моему всё очень логично...

Если хотите чтоб всё в одном exe файле было, соберите вашу Qt статически.

./configure -release -static .... Эта теме не нова, поищите по форуму.

 


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 14:59
либу то она сама должна находить. Она есть в папке $Qt\bin\

Но чего-то не хватает. Да и из самой папки приложения она не берет либу.

видимо, самособиралка не катит, нужно из исходников поднимать библиотеку, стобы статиком задать...


Название: Re: Перевод приложения с Linux на Windows
Отправлено: m_ax от Апрель 13, 2009, 15:08
Цитировать
видимо, самособиралка не катит, нужно из исходников поднимать библиотеку, стобы статиком задать...

Мне не совсем понятно, вы как exe запускаете: через QtCreator (Ctr + R) или заходите в каталог и мышью кликаете? Если последний вариант то нужно с exe держать библиотеки mingw10.dll (QtGui4.dll, QtCore4.dll, ... это если вы собрали как release, а если в debug то QtGuid4.dll, QtCored.4.dll, ...)   


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 13, 2009, 15:13
Мне не совсем понятно, вы как exe запускаете: через QtCreator (Ctr + R) или заходите в каталог и мышью кликаете? Если последний вариант то нужно с exe держать библиотеки mingw10.dll (QtGui4.dll, QtCore4.dll, ... это если вы собрали как release, а если в debug то QtGuid4.dll, QtCored.4.dll, ...)   

И из папки дебага и из папки релиза пробовал:
Цитировать
(через QtCreator (Ctr + R))
Цитировать
Starting ...

The process could not be started!

А через оконный менеджер: (
Цитировать
заходите в каталог и мышью кликаете?
)
Цитировать
Приложению не удалось запуститься, поскольку mingwm10.dll не был найден. Повторная установка приложения ...

То есть и из самого креатора не запускается.


Название: Re: Перевод приложения с Linux на Windows
Отправлено: pastor от Апрель 13, 2009, 15:42
В переменую среду PATH Windows пропиши пути к директории $QTDIR\bin, и к той директории где лежит mingw10.dll, перегрузи комп, и будет тебе счастье.


Название: Re: Перевод приложения с Linux на Windows
Отправлено: SABROG от Апрель 13, 2009, 20:22
В переменую среду PATH Windows пропиши пути к директории $QTDIR\bin, и к той директории где лежит mingw10.dll, перегрузи комп, и будет тебе счастье.

Вообще в первый раз вижу человека знакомого с linux больше, чем с windows (это я о MinGW).

Я бы не рекомендовал этого делать (решать проблему через пути в PATH). Объясню почему. Если приложение использует плагины (даже те, которые лежат в папке в исходниками Qt), то и плагины и программа пытаются подгрузить в память каждый свой экземпляр библиотек Qt (QtGui*.dll, QtCore*.dll и т.д.). Это приводит к тому, что приложение крашится. Возникает проблема с выполнением плагина и приложения в разных потоках. Я не знаю как обстоят дела в *nix'ах, но под виндой это именно так (откровенно говоря не понимаю почему это происходит, ведь системные библиотеки по 100 раз не загружаются для каждой программы, но для Qt дела обстоят так) . По-нормальному это должно происходить следующим образом: при запуске программы должны загружаться в память Qt'шные библиотеки, затем подргужается плагин и использует те библиотеки, которые уже загружены и являются общими и для программы и для плагинов. И это нормально работает, когда Qt'шные библиотеки находятся в папке с .exe'шником. Предчувствуя гневные посты типа "это касается только тех приложений, которые используют плагины" и т.д., хочу сказать, что лучше сразу привыкать делать по-нормальному иначе это чревато системными ошибками, которые и опытный Qt'шник не отловит через дебаггер.


Название: Re: Перевод приложения с Linux на Windows
Отправлено: pastor от Апрель 13, 2009, 20:29
Все оно верно, но можно не вбивать пути жество, а написать батники, и с командной строки запустить батник, а потом само приложение


Название: Re: Перевод приложения с Linux на Windows
Отправлено: SABROG от Апрель 13, 2009, 20:51
Все оно верно, но можно не вбивать пути жество, а написать батники, и с командной строки запустить батник, а потом само приложение

Будет ровно тоже самое. Я вообще никогда не прописывал жестко пути в системе, т.к. у меня несколько версий Qt: официальный релиз, снапшот из git'a, снапшот собранный статически, снапшот собранный статически с насильным отключением ненужных библиотек через qconfig. И для всех версий - батники, где я полностью затираю переменную PATH и прописываю только нужные директории.


Название: Re: Перевод приложения с Linux на Windows
Отправлено: pastor от Апрель 13, 2009, 21:33
Будет ровно тоже самое.
....
И для всех версий - батники, где я полностью затираю переменную PATH и прописываю только нужные директории.

эммм ))) А я что написал? ;)

Цитировать
...но можно не вбивать пути жество, а написать батники, и с командной строки запустить батник....

:)

У меня 10 сборок Qt начиная с 3.3.8, для каждой батник - полет нормальный


Название: Re: Перевод приложения с Linux на Windows
Отправлено: SABROG от Апрель 13, 2009, 21:36
У меня 10 сборок Qt начиная с 3.3.8, для каждой батник - полет нормальный

У меня тоже был нормальный полет до того как я недавно с плагинами столкнулся. В итоге сейчас я через консоль с предустановленным окружением стараюсь свои программы не запускать (делаю это из Total Commander'а или обычной виндовой папки), надо ведь, чтобы компилятор видел qmake и прочее.

В общем получается такая штука. Если в папке с программой есть Qt'шные библиотеки и одновременно прописан путь к папке lib или bin с исходниками Qt, и при этом программа использует плагины где-нибудь в подпапке, то эти плагины не загружаются и не работают по причине о которой я писал выше.

Для эксперимента, создайте новую папку и поместите в неё designer со всеми необходимыми .dll'ками из папки bin. Затем из папки plugins скопируйте папку designer в эту новую папку. Запустите designer.exe из консоли, где в path прописаны пути к Qt. Затем зайдите в меню Help->About Plugins - большая часть плагинов просто не загружаются без объяснения реальных причин (только "указанный модуль не найден", при этом все найдено на самом деле, но ОС выдает это сообщение на любую неудачную попытку загрузить модуль).


Название: Re: Перевод приложения с Linux на Windows
Отправлено: Danila_Bagrofff от Апрель 14, 2009, 06:56
У меня 10 сборок Qt начиная с 3.3.8, для каждой батник - полет нормальный

У меня тоже был нормальный полет до того как я недавно с плагинами столкнулся. В итоге сейчас я через консоль с предустановленным окружением стараюсь свои программы не запускать (делаю это из Total Commander'а или обычной виндовой папки), надо ведь, чтобы компилятор видел qmake и прочее.

В общем получается такая штука. Если в папке с программой есть Qt'шные библиотеки и одновременно прописан путь к папке lib или bin с исходниками Qt, и при этом программа использует плагины где-нибудь в подпапке, то эти плагины не загружаются и не работают по причине о которой я писал выше.

Для эксперимента, создайте новую папку и поместите в неё designer со всеми необходимыми .dll'ками из папки bin. Затем из папки plugins скопируйте папку designer в эту новую папку. Запустите designer.exe из консоли, где в path прописаны пути к Qt. Затем зайдите в меню Help->About Plugins - большая часть плагинов просто не загружаются без объяснения реальных причин (только "указанный модуль не найден", при этом все найдено на самом деле, но ОС выдает это сообщение на любую неудачную попытку загрузить модуль).

Будет ровно тоже самое.
....
И для всех версий - батники, где я полностью затираю переменную PATH и прописываю только нужные директории.

эммм ))) А я что написал? ;)

Цитировать
...но можно не вбивать пути жество, а написать батники, и с командной строки запустить батник....

:)

У меня 10 сборок Qt начиная с 3.3.8, для каждой батник - полет нормальный

Ну и уж тогда батник, плиз =)

Вы меня простите, но в линуксе никакого гемора нет. Подключаемые библиотеки указываются ручками в make-файле. Там можно собирать все необходимые библиотеки, указывая только пути. При этом юзать не только qt-ные либы, но и стандартные линуховские. А здесь это скорее похоже на танцы с бубнами.

пс. в дебагере форма показалась и даже работает =)


Название: Re: Перевод приложения с Linux на Windows
Отправлено: kmikhailov от Июль 22, 2010, 08:56
хм, а почему тогда не запускается приложение?

в папке debug нашел файл: grag.exe, но при запуске:
Цитировать
Starting ...

The process could not be started!

А через оконный менеджер:
Цитировать
Приложению не удалось запуститься, поскольку mingwm10.dll не был найден. Повторная установка приложения ...

То же самое было у меня. Работал с проектом. Вдруг через Ctrl-R перестал запускаться "exited with code -1073741819", а вручную из папки ругается на mingwm10.dll.
Перепробовал все, но проблема была в исходнике - цикл:
QRectF GraphicsTextLabelItem::boundingRect() const
{
    return boundingRect();
}
заменил на
QRectF GraphicsTextLabelItem::boundingRect() const
{
    // ...
    return QGraphicsSimpleTextItem::boundingRect();
}
и все заработало как прежде.