Russian Qt Forum

Qt => Базы данных => Тема начата: Den2009 от Сентябрь 30, 2010, 18:14



Название: cannot find -lmysql
Отправлено: Den2009 от Сентябрь 30, 2010, 18:14
Решил начать осваивать базы данных, для начала попытался собрать пример из книги (архив прилагается (http://file.qip.ru/file/r4ZqlS9a/cdcollection.html))
компилятор выдает следующее:
Код:
Выполняется сборка проекта cdcollection...
Запускается: C:/MinGW/bin/mingw32-make.exe clean -w
mingw32-make: Entering directory `C:/cdcollection'
C:/MinGW/bin/mingw32-make -f Makefile.Release clean
mingw32-make[1]: Entering directory `C:/cdcollection'
del release\moc_artistform.cpp release\moc_mainform.cpp release\moc_trackdelegate.cpp
del release\artistform.o release\main.o release\mainform.o release\trackdelegate.o release\moc_artistform.o release\moc_mainform.o release\moc_trackdelegate.o
mingw32-make[1]: Leaving directory `C:/cdcollection'
C:/MinGW/bin/mingw32-make -f Makefile.Debug clean
mingw32-make[1]: Entering directory `C:/cdcollection'
del debug\moc_artistform.cpp debug\moc_mainform.cpp debug\moc_trackdelegate.cpp
del debug\artistform.o debug\main.o debug\mainform.o debug\trackdelegate.o debug\moc_artistform.o debug\moc_mainform.o debug\moc_trackdelegate.o
mingw32-make[1]: Leaving directory `C:/cdcollection'
mingw32-make: Leaving directory `C:/cdcollection'
ЌҐ г¤ Ґвбп ­ ©вЁ C:\cdcollection\debug\moc_artistform.cpp
ЌҐ г¤ Ґвбп ­ ©вЁ C:\cdcollection\debug\artistform.o
Завершено с кодом возврата 0.
Настройки не изменились, этап QMake пропускается.
Запускается: C:/MinGW/bin/mingw32-make.exe -w
mingw32-make: Entering directory `C:/cdcollection'
C:/MinGW/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/cdcollection'
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\artistform.o artistform.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\main.o main.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\mainform.o mainform.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\trackdelegate.o trackdelegate.cpp
C:/Qt/4.6.0/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -D__GNUC__ -DWIN32 artistform.h -o release\moc_artistform.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\moc_artistform.o release\moc_artistform.cpp
C:/Qt/4.6.0/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -D__GNUC__ -DWIN32 mainform.h -o release\moc_mainform.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\moc_mainform.o release\moc_mainform.cpp
C:/Qt/4.6.0/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -D__GNUC__ -DWIN32 trackdelegate.h -o release\moc_trackdelegate.cpp
g++ -c -O2 -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_DYNAMIC_CAST -I"..\Qt\4.6.0\include\QtCore" -I"..\Qt\4.6.0\include\QtGui" -I"..\Qt\4.6.0\include\QtSql" -I"..\Qt\4.6.0\include" -I"..\Qt\4.6.0\include\ActiveQt" -I"release" -I"..\Qt\4.6.0\mkspecs\win32-g++" -o release\moc_trackdelegate.o release\moc_trackdelegate.cpp
g++ -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,windows -o release\cdcollection.exe release/artistform.o release/main.o release/mainform.o release/trackdelegate.o release/moc_artistform.o release/moc_mainform.o release/moc_trackdelegate.o -L"c:\Qt\4.6.0\lib" -lmingw32 -lqtmain -lQtSql -lQtGui -lmysql -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
c:/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lmysql
collect2: ld returned 1 exit status
mingw32-make[1]: Leaving directory `C:/cdcollection'
mingw32-make: Leaving directory `C:/cdcollection'
mingw32-make[1]: *** [release\cdcollection.exe] Error 1
mingw32-make: *** [release] Error 2
Завершено с кодом возврата 2.
Ошибка во время сборки проекта cdcollection
Во время выполнения сборки на этапе 'Make'

поиск в интернете ничего полезного не дал. перепробовал много чего, что советуют - безрезультатно
стоит QT4.6.0, собрана статически, со следующими ключами:
Код:
configure -release -static -nomake examples -qt-libjpeg -qt-zlib -qt-libpng -nomake demos -no-exceptions -no-style-cde -qt-sql-mysql -qt-sql-sqlite -no-style-cleanlooks -no-style-plastique -no-stl -no-rtti -no-qt3support -no-scripttools -platform win32-g++


Название: Re: cannot find -lmysql
Отправлено: crossly от Сентябрь 30, 2010, 18:52
так добавь
Код:
LIBS+=-L<путь к libmysql>


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Сентябрь 30, 2010, 21:06
добавил - тоже самое. просит lmysql, а такой библиотеки нет вообще


Название: Re: cannot find -lmysql
Отправлено: crossly от Сентябрь 30, 2010, 21:13
а как же вы тогда собрали qt с ключом -qt-sql-mysql ??


Название: Re: cannot find -lmysql
Отправлено: Mikhail от Сентябрь 30, 2010, 21:35
Скорее всего не собрал.
Кроме этого ключа необходимо при компиляции Qt указать путь к инклудам mysql и mysql.lib


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Сентябрь 30, 2010, 21:37
да, вроде бы, нормально собралось, без ошибок
есть библиотека libmysql, прописываю к ней путь, а просит lmysql, которой нет


Название: Re: cannot find -lmysql
Отправлено: crossly от Сентябрь 30, 2010, 21:42
-lmysql означает что будет произведен поиск библиотеки libmysql.a


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 01, 2010, 07:44
решил пересобрать кутэ, действительно собралось с ошибками.
вот скрин:
http://file.qip.ru/photo/sXmbfVzV/_2_online.html
в чем причина?


Название: Re: cannot find -lmysql
Отправлено: Hellraiser от Октябрь 01, 2010, 11:24
Так и что там непонятного? Четко сказано, что невозможно найти mysql.h. Все последующие ошибки есть следствие первой.
Пути решения: 1. Установить клиента MySQL с Developer библиотеками. 2. Добавить путь к includ`ам MySQL при конфигурации Qt.
Проще чем здесь http://doc.qt.nokia.com/4.6/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows (http://doc.qt.nokia.com/4.6/sql-driver.html#how-to-build-the-qmysql-plugin-on-windows) и не скажешь


Название: Re: cannot find -lmysql
Отправлено: crossly от Октябрь 01, 2010, 13:12
+100


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 01, 2010, 13:45
делаю, как написано по ссылке, на стадии выполнения make появляется ошибка:
http://file.qip.ru/photo/BeuEJdX2/_3_online.html
в чем причина? QT в данный момент не собрана, может надо сначала ее собрать?


Название: Re: cannot find -lmysql
Отправлено: crossly от Октябрь 01, 2010, 13:52
ну конечно нужно.... что  вы собираетесь делать с драйвером если у вас сама библиотека не собрана...

ну вообще на сколько я помню вы хотели статическую сборку с вкомпилированной поддержкой mysql?? . тогда вам нужно сделать точно так же как вы делали изначально... только добавить в configure пути к либам и хидерам mysql


Название: Re: cannot find -lmysql
Отправлено: Hellraiser от Октябрь 01, 2010, 14:01
Опередили  ;D
Плагины собираются для динамической Qt. Для статика надо добавить пути при конфигурировании Qt:
Код:
configure <ключи конфигурации> -I "путь_к_заголовкам_MySQL" -L "путь_к_библиотекам_MySQL"
Надо учесть, что в папке MySql\Lib\opt релизные версии библиотек MySQL. Могу посоветовать для разработки использовать shared debug_and_release Qt, а для распространения - static release Qt (но это нарушает лицензионное соглашение, т.к. static разрешено только для Qt Commercial).


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 02, 2010, 09:02
при сборке с подключением mysql библиотек начало вываливаться с ошибками, как описано тут:
http://www.prog.org.ru/index.php?topic=9296.msg52880#msg52880
исправлял так же, но затем вывалилось с таким сообщением:
http://file.qip.ru/photo/nMCpynnu/_4_online.html
поправил makefile, результатов никаких. поиск по интернету ничего не дал... где собака зарыта?


Название: Re: cannot find -lmysql
Отправлено: Hellraiser от Октябрь 02, 2010, 19:48
Ничего не правил, все собралось и работает. Решение для Windows и MinGW
1. Качаем исходники Qt 4.7.0 (qt-everywhere-opensource-src-4.7.0.zip) отсюда (ftp://ftp.qt.nokia.com/qt/source/).
2. Для сборки с поддержкой MySQL достаточно клиента, взять можно отсюда (http://ftp.gwdg.de/pub/misc/mysql/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip).
3. Меняем расширение c:\mysql\lib\libmysql.lib на .a
4. Пусть исходники Qt находятся в c:\Qt\4.7.0_static и клиент MySQL в c:\mysql.
5. MinGW уже установлен ранее и прописан в PATH
6. Запускаем cmd.exe
Код:
set QTDIR=c:\Qt\4.7.0_static
set PATH=c:\Qt\4.7.0_static;%PATH%
set QMAKESPEC=win32-g++
cd c:\Qt\4.7.0_static
configure -release -static -I c:\mysql\include -L c:\mysql\lib -l mysql -nomake demos -nomake examples -developer-build -qt-sql-sqlite -qt-sql-odbc -qt-sql-mysql -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-qt3support -no-plugin-manifests -phonon -phonon-backend -audio-backend -webkit -script -scripttools -declarative
Дожидаемся окончания конфигурации и сборки qmake.exe. Начинаем сборку библиотек (и только их)
Код:
mingw32-make sub-src
7. Ооочень долго ждем. Проверяем работоспособность (не закрывая консоль)
Код:
cd demos\sqlbrowser
qmake
mingw32-make
У полученного sqlbrowser.exe остались зависимости только от libmysql.dll и mingwm10.dll


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 03, 2010, 21:32
сборка заканчивается не успешно, выдает следующее:
http://file.qip.ru/photo/Ibt8avio/_5_online.html


Название: Re: cannot find -lmysql
Отправлено: crossly от Октябрь 03, 2010, 22:12
уберите phonon из конфигурации .... вы его с mingw не соберете...


Название: Re: cannot find -lmysql
Отправлено: Hellraiser от Октябрь 04, 2010, 09:34
С патченым MinGW от нокии (из состава SDK) libphonon.a собрался, но примеры с фононом все равно не работают. Лучше убрать phonon и phonon-backend.


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 04, 2010, 12:59
все равно не хочет собираться:
http://file.qip.ru/photo/sKaEUTGz/_6_online.html


Название: Re: cannot find -lmysql
Отправлено: Hellraiser от Октябрь 04, 2010, 13:44
Библиотека уже собрана, не собирается Assistant. Поэтому я и указал
Код:
mingw32-make sub-src
P.S. Свое решение я написал не просто так, а предварительно потратив время и успешно собрав библиотеку + тестовый пример. Может пора уже научиться читать ошибки?


Название: Re: cannot find -lmysql
Отправлено: crossly от Октябрь 04, 2010, 13:48
Цитировать
Может пора уже научиться читать ошибки?
+100!


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 04, 2010, 19:22
ошибки я читать умею, и понял,что дело в ассистенте... сборка - довольно таки долгий процесс, поэтому я и спросил, чтоб не пересобирать несколько раз из-за того, что я что-то сделал не так..
после ввода
Код:
mingw32-make sub-src
не собиралось ничего весь процесс был такого вида, причем завершился быстро - пару минут:
Код:
entering directory ....
nothing to be done 'first'
leaving directory ...
ошибок не было

пример собрал - работает
есть зависимость от mingwm10.dll и libmysql.dll можно ли как нибудь от нее избавиться?


Название: Re: cannot find -lmysql
Отправлено: Hellraiser от Октябрь 04, 2010, 21:42
От mingwm10.dll надо искать по форуму, было решение. От libmysql.dll - надо качать исходники (http://ftp.gwdg.de/pub/misc/mysql/Downloads/Connector-C/mysql-connector-c-6.0.2.zip), собирать их в статике. А потом пересобрать Qt. Только стоит ли оно этого? У меня простой пример из демок Qt при статической сборке давал в релизе ~10Мб. И это все ради одного файла? Есть sfx-архивы, инсталляторы. Опять же, нарушение лицензии.


Название: Re: cannot find -lmysql
Отправлено: crossly от Октябрь 04, 2010, 22:08
никакого нарушения лицензии здесь нет... GPL и LGPL вполне можно линковать статически... просто при этом и исходники придется открыть...


Название: Re: cannot find -lmysql
Отправлено: Den2009 от Октябрь 05, 2010, 15:26
От mingwm10.dll надо искать по форуму, было решение. От libmysql.dll - надо качать исходники (http://ftp.gwdg.de/pub/misc/mysql/Downloads/Connector-C/mysql-connector-c-6.0.2.zip), собирать их в статике. А потом пересобрать Qt. Только стоит ли оно этого? У меня простой пример из демок Qt при статической сборке давал в релизе ~10Мб. И это все ради одного файла? Есть sfx-архивы, инсталляторы. Опять же, нарушение лицензии.
про то, как избавиться от зависимости от mingw32, я знаю, делал так, как описано тут (http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_Qt_%D0%B1%D0%B5%D0%B7_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%28MinGW%29), но почему-то не помогло, хотя, когда собирал до этого - все было нормуль. про libmysql - попробую как-нибудь на досуге, пока это не критично важно...
всем спасибо за консультации