Название: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 21, 2010, 21:25 Доброго времени суток.
Решил в Windows обновить себе SDK c qt-sdk-win-opensource-2009.04.exe на qt-sdk-win-opensource-2010.02.1.exe. (т.е. сменить Qt4 v4.5.x на Qt4 v 4.6.2) Установил, добавил для юзера переменную окружения: Цитировать PATH = c:\Qt\2010.02.1\qt\bin; c:\Qt\2010.02.1\mingw\bin Добавил в c:\Qt\2010.02.1\qt\bin\ файл make.bat c таким содержимым: Цитировать @echo off mingw32-make %* пытаюсь собрать проект из консоли и получаю сюрприз: Цитировать D:\SVN\trunk>make cd examples\reader\ && c:\Qt\2010.02.1\qt\bin\qmake.exe d:\SVN\trunk\examples\reader\reader.pro -win32 -o Makefile cd examples\reader\ && mingw32-make -f Makefile mingw32-make[1]: Entering directory `D:/SVN/trunk/examples/reader' g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQ T_THREAD_SUPPORT -I"c:\Qt\2010.02.1\qt\include\QtCore" -I"c:\Qt\2010.02.1\qt\include" -I"..\..\qserialdevice" -I"c:\Qt\2 010.02.1\qt\include\ActiveQt" -I"..\..\build\bin\reader\moc" -I"c:\Qt\2010.02.1\qt\mkspecs\default" -o ..\..\build\bin\r eader\obj\main.o main.cpp windres -i version.rc -o ..\..\build\bin\reader\obj\version_res.o --include-dir=. g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthrea ds -Wl -o ..\..\build\bin\reader\release\reader.exe ../../build/bin/reader/obj/main.o -L"..\..\build\lib\qintegratedser ialdevice\release" -L"c:\Qt\2010.02.1\qt\lib" ..\..\build\bin\reader\obj\version_res.o -lqserialdevice -lQtCore4 ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x267): undefined reference to `_imp___ZN14AbstractSerialC1EP7QObject' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x2c5): undefined reference to `_imp___ZN14AbstractSerial13setDeviceNa meERK7QString' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x316): undefined reference to `_imp___ZNK14AbstractSerial10deviceName Ev' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x6e9): undefined reference to `_imp___ZNK14AbstractSerial8baudRateEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x807): undefined reference to `_imp___ZNK14AbstractSerial8dataBitsEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x925): undefined reference to `_imp___ZNK14AbstractSerial6parityEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0xa43): undefined reference to `_imp___ZNK14AbstractSerial8stopBitsEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0xb61): undefined reference to `_imp___ZNK14AbstractSerial11flowContro lEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0xc79): undefined reference to `_imp___ZNK14AbstractSerial19charInterv alTimeoutEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0xd76): undefined reference to `_imp___ZN14AbstractSerial11setBaudRate ENS_8BaudRateE' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x10a2): undefined reference to `_imp___ZNK14AbstractSerial10deviceNam eEv' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x12d7): undefined reference to `_imp___ZN14AbstractSerial11setDataBit sENS_8DataBitsE' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x141a): undefined reference to `_imp___ZN14AbstractSerial9setParityEN S_6ParityE' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x1a7e): undefined reference to `_imp___ZN14AbstractSerial11setStopBit sENS_8StopBitsE' ../../build/bin/reader/obj/main.o:main.cpp:(.text+0x1a97): undefined reference to `_imp___ZN14AbstractSerial14setFlowCon trolENS_4FlowE' collect2: ld returned 1 exit status mingw32-make[1]: *** [..\..\build\bin\reader\release\reader.exe] Error 1 mingw32-make[1]: Leaving directory `D:/SVN/trunk/examples/reader' mingw32-make: *** [sub-examples-reader-make_default-ordered] Error 2 D:\SVN\trunk> О_О... Собирал также в QtCreator - результат тот-же. Самое интересное, что в *.nix собирается без проблем, также отметить хочу, что без проблем тот же самый проект собирался и в Qt4 v4.5.x!!! Кто-нибудь сталкивался с такой проблемой? Может дело в компиляторе MinGW v4.4.0 ? >:( --- т.е. проект состоит из 2-х частей: 1. - это сборка статической библиотеки (сборка проходит успешно) 2. - это сборка самих приложений, использующих эту статическую библиотеку. Вот при шаге №2 вываливаются ошибки. Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: niXman от Март 21, 2010, 21:55 Цитировать AbstractSerial это кто?Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 21, 2010, 22:08 Цитировать это кто? класс. см. проект : svn checkout svn://scm.fireforge.net/svnroot/qserialdevice Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: cya-st от Март 21, 2010, 22:13 Может в переменных окружения указан путь на qtcreator\bin, не должно быть.
Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 21, 2010, 22:18 Цитировать Может в переменных окружения указан путь на qtcreator\bin, не должно быть. не, не указан.Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: cya-st от Март 21, 2010, 22:40 Цитировать Может в переменных окружения указан путь на qtcreator\bin, не должно быть. не, не указан.Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 21, 2010, 23:20 Цитировать Может не полностью удалена предыдущая версия Qt? Где-то остались старые библиотеки по всей видимости. всё удалил из С:\Qt после анинсталла :) Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: lit-uriy от Март 22, 2010, 00:00 >>Добавил в c:\Qt\2010.02.1\qt\bin\ файл make.bat
добавить-то лучше было в c:\Qt\2010.02.1\mingw\bin но это всё равно не должно, влиять, т.к. путь к c:\Qt\2010.02.1\mingw\bin виден через PATH. Но впечатление действительно такое, как буд-то в PATH сидит ещё какой-то путь. Посмотри что в консоли выведет path Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: pastor от Март 22, 2010, 01:02 Цитировать это кто? класс. см. проект : svn checkout svn://scm.fireforge.net/svnroot/qserialdevice А с какой версией Qt собрана эта библиотека? Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 22, 2010, 08:25 Цитировать А с какой версией Qt собрана эта библиотека? эммм... не понял что имеется ввиду?она для сборки в Qt4. ( собирал от v4.1.x до v4.6.2 ) Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: lit-uriy от Март 22, 2010, 10:45 kuzulis, имеется в виду ты свою библиотеку собираешь одной и тойже версией Qt, что и приложение?
Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 22, 2010, 11:18 Цитировать kuzulis, имеется в виду ты свою библиотеку собираешь одной и тойже версией Qt, что и приложение? Конечно :)Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 22, 2010, 11:51 Понял в чем проблема. Это мой касяк.
Я добавил в проект некий "финт" для того чтобы обеспечить возможность сборки библиотеки как в динамическом виде (MinGW или MSVC) так и в статическом виде. Добавил в *.h файл своего экспортируемого класса это QSERIALDEVICE_EXPORT: Код: class QSERIALDEVICE_EXPORT AbstractSerial : public QIODevice далее был создан файл: qserialdevice_global.h с таким содержанием: Код: #ifndef QSERIALDEVICEGLOBAL_H далее в *.pro файл проекта (который собирает библиотеку) было добавлено следующее: Код: ... т.е. в таком виде сама библиотека то собирается (под Windows , MinGW) , но приложение с ней не линкуется! Заработало только после того как я убрал : QSERIALDEVICE_EXPORT из *.h файла класса + закомментировал #include "qserialdevice_global.h" :( Но в такой ситуации невозможна сборка библиотеки как динамической в MSVC. т.е. с QSERIALDEVICE_EXPORT - невозможна линковка приложений с статической библиотекой, а без QSERIALDEVICE_EXPORT - невозможна сборка самой библиотеки как динамической в MSVC. Замкнутый круг какой-то. Как решить проблему - не знаю :( . Нигде это не описано. Название: Re: Qt4. SDK 2010.02.1. Windows. Проблемы со сборкой приложений. Отправлено: kuzulis от Март 22, 2010, 12:43 Пока выход нашел такой:
1. в файле "qserialdevice_global.h" пишем: Код: #ifndef QSERIALDEVICEGLOBAL_H 2. в файле-хейдере класса пишем: Код: #if defined(QSERIALDEVICE_EXPORT) 3. В файле проекта (*.pro) либы пишем: Код: ... Cобирал в Windows с MinGW . Либа собирается (как статика так и динамика) и приложения с ней линкуются :) |