Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема со сборкой проекта в Windows
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
asdf
Здравствуйте. Помогите решить следующую проблему - делал проект на QT в Ubuntu. Всё собралось и работает. Но надо собрать EXE-шник. Принёс домой, но на винде проект отказался собираться и выдал три ошибки
c:\Qt\2010.02.1\qt\lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.text+0x1c2): undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.text$_ZN7QVectorIPcE7reallocEii[QVector<char*>::realloc(int, int)]+0x187): undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\ScienceWork.exe] Error 1
mingw32-make: *** [release] Error 2
Завершено с кодом 2.
Ошибка во время сборки проекта ScienceWork
Во время выполнения сборки на этапе 'Make'

в чём косяк может быть?? сам что-то не пойму. На Windows машине стоит QT 4.6.2. MinGw 5.1.6
SABROG
Попробуй так:

mingw32-make distclean
qmake && mingw32-make all

asdf
ээээ....простите мою безграмотность. А где это надо вводить? а то консолью я ни разу не пользовался - всё через qt creator
kuzulis
Цитата
ээээ....простите мою безграмотность. А где это надо вводить? а то консолью я ни разу не пользовался - всё через qt creator

в креаторе это означает что-то вроде "пересобрать проект"
molchanoviv
Цитата(asdf @ 12.3.2010, 13:19) *
а то консолью я ни разу не пользовался

Не можешь пользоваться консолью, просто удали объектники из папки с проектом. Прямо из Файлового менеджера.
asdf
Цитата(kuzulis @ 12.3.2010, 13:29) *
в креаторе это означает что-то вроде "пересобрать проект"

ну я пересобрал проект, попробовал во вкладке "проекты" добавлять ключи, но он всё равно не хочет собираться и выдаёт следующее:
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o): In function `WinMain@16':
C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/qtmain_win.cpp:93: undefined reference to `_Unwind_Resume'
C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/qtmain_win.cpp:135: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/../../include/QtCore/../../src/corelib/tools/qvector.h:482: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/../../include/QtCore/../../src/corelib/tools/qvector.h:483: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\ScienceWork.exe] Error 1
mingw32-make: *** [debug] Error 2
Завершено с кодом 2.
Ошибка во время сборки проекта ScienceWork
Во время выполнения сборки на этапе 'Make'
Litkevich Yuriy
asdf, ну это явно из-за ресурсов. Тебе нужно всё таки сделать make distclean. Попробуй открыть коммандную строку виндовс и перейди в каталог с pro-файлом. и там скомандуй make distclean
DEADHUNT
Цитата(Litkevich Yuriy @ 13.3.2010, 0:00) *
asdf, ну это явно из-за ресурсов. Тебе нужно всё таки сделать make distclean. Попробуй открыть коммандную строку виндовс и перейди в каталог с pro-файлом. и там скомандуй make distclean

нет это связано с обработкой исключений (eh_frame - exception handling), библиотеки какой-то нехватает, RTTI можно ещё попробовать включить.
asdf
А как запустить этот distclean на винде?? ведь команда mke - это никсовая команда??? и ещё посморел, что выводится при очистке проекта -
ЌҐ г¤ Ґвбп ­ ©вЁ C:\dev\ScienceWork_UBUNTU\release\moc_mainwindow.cpp
ЌҐ г¤ Ґвбп ­ ©вЁ C:\dev\ScienceWork_UBUNTU\ui_mainwindow.h
mingw32-make[1]: Leaving directory `C:/dev/ScienceWork_UBUNTU'
mingw32-make: Leaving directory `C:/dev/ScienceWork_UBUNTU'
ЌҐ г¤ Ґвбп ­ ©вЁ C:\dev\ScienceWork_UBUNTU\release\main.o
Завершено с кодом 0.
- может проблема какая-то с кодировками???

И простите мою наглость)))может я выложу проект, а ктонить скомпилит его под винду?? просто в универе просят готовый экзешник, а я в душе не пойму как его сделать. блин надо было с самого начала под виндой делать.
DEADHUNT
Цитата(asdf @ 13.3.2010, 0:44) *
А как запустить этот distclean на винде?? ведь команда mke - это никсовая команда???

make - это не команда, а программа. в винде ищи её в папке mingw/bin.
igor_bogomolov
Цитата(DEADHUNT @ 13.3.2010, 0:48) *
make - это не команда, а программа. в винде ищи её в папке mingw/bin.
если я правильно помню, в данном случае она будет называться mingw32-make
SABROG
Обычно такое возникает, когда проект пытаются собрать на разных версиях mingw/gcc. Сначала всё собрали на одной версии, потом перенесли и пытаются собрать на другой. Возможно проблема в путях, 2 mingw разных версий на одной машине. Как бы там ни было пересборка с distclean должна решить проблему.
Litkevich Yuriy
у меня вчера вечером точно такая же ошибка была
Цитата
include/QtCore/../../src/corelib/tools/qvector.h:483: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

после того, как я решил добавить в pro-файл VERSION. Ни как не думал, что придётся все пересобирать. Линкер постоянно ошибки выдавал.
Полная пересборка помогла.

asdf, сделай BAT-файл, по аналогии с описанным здесь (там он называется qt432.bat). Этот батник будет запускать консоль в нужном окружении. В этой консоли, в каталоге с проектом и проведи пересборку
asdf
Спасибо за советы, но чёт не могу пока я запустить этот проект на факаной винде. Пересборка с ключами -debug -release -static не помогла. При сборке теперь выдаёт
Раскрывающийся текст
Выполняется сборка проекта ScienceWork...
Запускается: C:/MinGW/bin/mingw32-make.exe -w
mingw32-make: Entering directory `C:/dev/ScienceWork_UBUNTU'
C:/MinGW/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/dev/ScienceWork_UBUNTU'
c:\Qt\2010.02.1\qt\bin\uic.exe mainwindow.ui -o ui_mainwindow.h
mingw32-make[1]: Leaving directory `C:/dev/ScienceWork_UBUNTU'
mingw32-make: Leaving directory `C:/dev/ScienceWork_UBUNTU'
process_begin: CreateProcess(NULL, c:\Qt\2010.02.1\qt\bin\uic.exe mainwindow.ui -o ui_mainwindow.h, ...) failed.
make (e=2): Не удается найти указанный файл.
mingw32-make[1]: *** [ui_mainwindow.h] Error 2
mingw32-make: *** [debug] Error 2
Завершено с кодом 2.
Ошибка во время сборки проекта ScienceWork
Во время выполнения сборки на этапе 'Make'


Метод SABROG'а пока не смог выполнить. Выполнение mingw32-make distclean заканчивается выводом
Раскрывающийся текст
mingw32-make[4]: Entering directory `C:/Qt/2010.02.1/qt/examples/activeqt/webbro
wser'
mingw32-make[4]: *** No rule to make target `distclean'. Stop.
mingw32-make[4]: Leaving directory `C:/Qt/2010.02.1/qt/examples/activeqt/webbrow
ser'
mingw32-make[3]: *** [debug-distclean] Error 2
mingw32-make[3]: Leaving directory `C:/Qt/2010.02.1/qt/examples/activeqt/webbrow
ser'
mingw32-make[2]: *** [sub-webbrowser-distclean] Error 2
mingw32-make[2]: Leaving directory `C:/Qt/2010.02.1/qt/examples/activeqt'
mingw32-make[1]: *** [sub-activeqt-distclean] Error 2
mingw32-make[1]: Leaving directory `C:/Qt/2010.02.1/qt/examples'
mingw32-make: *** [sub-examples-distclean-ordered] Error 2

Я так понимаю, что эроры ничего хорошего не означают?? Выполнение в папке /qt/ не выполняется, работает только в папке /qt/bin/ и требует доп ключи - какие нужно??
molchanoviv
Выложи сюда проект(если конечно можешь).
asdf
Цитата(molchanoviv @ 15.3.2010, 16:46) *
Выложи сюда проект(если конечно можешь).

http://narod.ru/disk/18777940000/ScienceWork_UBUNTU.zip.html
molchanoviv
mingw32-make distclean выполняется. Как вариант попробовал удалить объектники вручную. Т.е. все файлы с расширением .o из каталога с проектом и он преспокойненько собрался. В качестве доказательства прилагаю собранную версию.
asdf
Спасибо большое за советы. Пересобрал Qt c ключами -debug -release -plugin-sql-sqlite -static -qt-libpng -qt-libjpeg. И в моём проекте, и в проекте, собранном molchanoviv'ым вылетает одно и тоже
Раскрывающийся текст
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtSqld
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\ScienceWork.exe] Error 1
mingw32-make: *** [debug] Error 2
Завершено с кодом 2.
Ошибка во время сборки проекта ScienceWork
Во время выполнения сборки на этапе 'Make'

Я так понимаю, что не слинкована lQtSqld. Но я же указал ключ для сборки sql.....
Litkevich Yuriy
Цитата(asdf @ 20.3.2010, 2:44) *
Но я же указал ключ для сборки sql
а ты в своём pro-файле подключил модуль QtSql:
QT += sql
?
asdf
Цитата(Litkevich Yuriy @ 19.3.2010, 23:48) *
[а ты в своём pro-файле подключил модуль QtSql:
QT += sql
?

да.
QT += opengl \
sql \
xml

Litkevich Yuriy
Цитата(asdf @ 20.3.2010, 2:44) *
cannot find -lQtSqld
нет отладочной библиотеки
Цитата(asdf @ 20.3.2010, 2:44) *
пересобрал Qt c ключами -debug -release
последний ключ имеет силу, если тебе надо и отладку и релиз, то писать надо:
debug_and_release
смотри внимательно configure --help
RusB
Только что сталкнулся с такой же ошибкой.

При установке qt-sdk-win-opensource-2010.02.1.exe отказался от установки встроенного MinGw, т.к. на компе уже установлена версия отдельно.

Компилирую проект. Он не линкуется.

Переустановил Qt со встроенным MinGw - сразу заработало.
Litkevich Yuriy
Цитата(RusB @ 23.3.2010, 4:13) *
qt-sdk-win-opensource-2010.02.1.exe отказался от установки встроенного MinGw, т.к. на компе уже установлена версия отдельно.
у меня тоже стоит и не один MinGW, но установщик не отчего не отказывался, просто сказал, что "вот тут-то уже есть MinGW, надо?", я сказал "нет"
kuler
создаю пустой жуй проект в студии, компилю, получаю:
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall std::locale::facet::_Register(void)" (__imp_?_Register@facet@locale@std@@QAEXXZ) referenced in function "class std::ctype<char> const & __cdecl std::use_facet<class std::ctype<char> >(class std::locale const &)" (??$use_facet@V?$ctype@D@std@@@std@@YAABV?$ctype@D@0@ABVlocale@0@@Z) qtmaind.lib TestQT

сказали что надо пересобрать кутэ. Пытаюсь сделать но говорит не найден qconfig.cpp. Его действительно нигде нет. Помогите.
Litkevich Yuriy
Цитата(kuler @ 30.3.2010, 3:25) *
но говорит не найден qconfig.cpp.
а кто говорит?
Hypafrag
Такая ошибка , видимо, вознкает из-за несовместимости бинарников. Чтобы все было нормально, ваша версия mingw должна быть не меньше, чем версия mingw, которым собирались библиотеки. Отсюда 2 решения:
1 - обновить mingw
2 - пересобрать qt своей версией mingw
Red_Dragon
У меня подобная ситуация, подскажите как ее проще решить.

Раньше стояло MinGW 5.1.6 + QT 4.5.0 + qt eclipse integration 1.6.1, все было хорошо, но решил обновить qt до текушей (4.6.3). При установке получил сообщение:

There is a problem with your MinGW installation:
Do you still want to continue? (Your installation may not work)

Ну все-же продолжил. В итоге после установки и перенастройки Эклипса под новый QT получаю ошибку при попытке компиляции свеже созданного приложения:
Раскрывающийся текст
mingw32-make release
c:\Qt\4.6.3\bin\qmake -win32 -o Makefile qt_new.pro
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Users/Red_Dragon/workspace/qt_new'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\qt_new.exe release/main.o release/qt_new.o release/moc_qt_new.o -L"c:\Qt\4.6.3\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
c:\Qt\4.6.3\lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.text+0x1c2): undefined reference to `_Unwind_Resume'
mingw32-make[1]: Leaving directory `C:/Users/Red_Dragon/workspace/qt_new'
c:\Qt\4.6.3\lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.text$_ZN7QVectorIPcE7reallocEii[QVector<char*>::realloc(int, int)]+0x187): undefined reference to `_Unwind_Resume'
c:\Qt\4.6.3\lib/libqtmain.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\qt_new.exe] Error 1
mingw32-make: *** [release] Error 2

Как-бы от этого избавиться? MinGW и так самый новый, проект создаю новый, значит тащить за собой проблемы разных версий не может.
Litkevich Yuriy
У тролей на FTP лежит MinGW
Red_Dragon
Цитата(Litkevich Yuriy @ 18.7.2010, 22:31) *
У тролей на FTP лежит MinGW

Спасибо, все стало работать. Единственное что, стало выводить ошибки и замечание в неправельной кодировке, как я понимаю этот MinGW заточен под другую кодировку? Это можно поправить? Что-то не найду где.
Litkevich Yuriy
Цитата(Red_Dragon @ 19.7.2010, 3:35) *
Спасибо, все стало работать. Единственное что, стало выводить ошибки и замечание в неправельной кодировке, как я понимаю этот MinGW заточен под другую кодировку? Это можно поправить? Что-то не найду где.
он наверное выводит переведённый текст в кодировке CP1251, но так как в виндовозе русском кодировка CP866, то получается ерунда.
Как исправить, я не знаю.
DEADHUNT
может сделать LANG=C (LC_MESSAGES=C)
Red_Dragon
Цитата(DEADHUNT @ 19.7.2010, 0:28) *
может сделать LANG=C (LC_MESSAGES=C)

м-м-м, не помогло. Ну да ладно, пока не критично.
DarkHobbit
Цитата(asdf @ 13.3.2010, 0:39) *
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o): In function `WinMain@16':
C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/qtmain_win.cpp:93: undefined reference to `_Unwind_Resume'
C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/qtmain_win.cpp:135: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/../../include/QtCore/../../src/corelib/tools/qvector.h:482: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt\src\winmain/../../include/QtCore/../../src/corelib/tools/qvector.h:483: undefined reference to `_Unwind_Resume'
c:\Qt\2010.02.1\qt\lib/libqtmaind.a(qtmain_win.o):qtmain_win.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\ScienceWork.exe] Error 1
mingw32-make: *** [debug] Error 2
Завершено с кодом 2.

Эмм... та же самая фигня.
По итогам 4 страниц данной темы получается, что причин называют две:
1) Замусоренность проекта промежуточными файлами (лекарство - make distclean);
2) Конфликт версий MinGW.
Самое смешное, что у меня ни одна из этих причин не работает. Проект свеженький из svn (и на другом компе отлично собирается), а Qt и MinGW взяты из одного источника - Qt SDK с нокиевского сайта. И такое ощущение, что наличие указанного глюка зависит от сложности проекта - очень похожий проект, но с меньшим количеством модулей и у меня собирался вполне нормально.


Да, и что показательно - всё это в "дружественной" винде. В линуксе таких граблей нет, всё собирается замечательно.
Kagami
Такое ощущение что библиотеки не пропачились при установке SDK. Во время установки запускается qpatch.exe, который меняет во всех библиотеках строку C:\qt-greenhouse\Trolltech\Code_less_create_more\Trolltech\Code_less_create_more\Troll\4.6\qt на реальный путь (эта строка специально такая длинная, чтобы хватило в большинстве случаев).
DarkHobbit
Цитата(Kagami @ 20.6.2011, 19:04) *
qpatch.exe

Спасибо, как до компа с виндой доберусь, попробую поковырять в этом направлении.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.