Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.183.187] |
|
Сообщ.
#1
,
|
|
|
Под Windows
Как я понял, для конфигурации QT библиотеки с поддержкой MySQL или PostgreSQL, в соответствии с документацией следует писать примерно следующие опции configure.exe ... -shared ... -I "C:\pgsql\include" -L "C:\pgsql\lib" -l "libpq.a" -plugin-sql-psql -I "C:\mysql\include" -L "C:\mysql\lib\opt" -l "libmysql.dll" -plugin-sql-mysql В листинге конфигуратор сообщает, что установлены Дополнительные include-пути C:\mysql\include C:\pgsql\include Дополнительные библиотеки -LC:\pgsql\lib -llibpq.a -LC:\mysql\lib\opt -llibmysql.dll Ошибки нет, но это уже неправильно..., и он продолжает дальше Затем, после долгой конфигурации, выдает ошибку, что не может найти -llibpq.a Причем в листинге видно, что все другие пути он пишет с ковычками типа так -I"..." -L"..." а мои дополнительные без ковычек, так -I... -L... -l... что также неправильно т.е. он не различает опцию и аргумент в строке -llibpq.a Перепробовал кучу обходных способов, ничего не помогает. Что тут не так? |
Сообщ.
#2
,
|
|
|
Убери префиксы lib.
Т.е. configure.exe ... -shared ... -I "C:\pgsql\include" -L "C:\pgsql\lib" -l "pq.a" -plugin-sql-psql -I "C:\mysql\include" -L "C:\mysql\lib\opt" -l "mysql.dll" -plugin-sql-mysql Добавлено Цитата JavaStudent @ а мои дополнительные без ковычек, так Ничего страшного... Единственное, что посоветовал бы - если сидишь под msys, то привыкни писать слеши в другую сторону(типа c:/path/lib или вообще /c/path/lib). |
Сообщ.
#3
,
|
|
|
Цитата archimed7592 @ Убери префиксы lib. Попробую конечно. Сейчас не могу, очередной вариант работает. Но объясни мне пожалуйста, какой в этом скрытый смысл? В документации написано - -I <includepath> ... Add an explicit include path. -L <librarypath> ... Add an explicit library path. -l <libraryname> ... Add an explicit library name, residing in a librarypath. explicit library name - следует понимать как файл с расширением, обрезанный, без префикса "lib"? И, сдается мне, от этого автоформатирование строк не изменится. Добавлено Цитата archimed7592 @ то привыкни писать слеши в другую сторону пробовал, не помогает |
Сообщ.
#4
,
|
|
|
Цитата JavaStudent @ Но объясни мне пожалуйста, какой в этом скрытый смысл? Объяснения в документации g++. Конфигуратор просто подставляет эти параметры в параметры вызова g++. "-l<name>" подключает библиотеку "lib<name>.a". Виндовая версия также пробует вариант с расширением dll. Кстати, не "pq.a", а просто "pq". Если в указанной тобой папке лежит файл libmysql.dll.a, то mysql.dll, иначе, просто mysql. Добавлено Цитата JavaStudent @ Сейчас не могу, очередной вариант работает. Можешь не пробовать свой очередной вариант. Я собирал qt с stlport. Знаю что говорю. |
Сообщ.
#5
,
|
|
|
Спасибо, а то бы долго еще ковырялся! Место первой ошибки проскочил.
Возникли три вопроса... 1) Плагины собрались: libqsqlmysql4.a, libqsqlpsql4.a, qsqlpsql4.dll QT DLL для MySQL отсутствует Забыл сообщить, что версия MySQL 6.0, PostgreSQL 8.0 Компиляция завершилась с ошибкой ... erence to `mysql_close@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5170): undefined ref erence to `mysql_list_tables@8' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x51a3): undefined ref erence to `mysql_data_seek@12' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x51b1): undefined ref erence to `mysql_fetch_row@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5235): undefined ref erence to `mysql_free_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x539f): undefined ref erence to `mysql_stmt_result_metadata@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x53ba): undefined ref erence to `mysql_num_fields@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x54a4): undefined ref erence to `mysql_fetch_field@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x56a3): undefined ref erence to `mysql_next_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x56c1): undefined ref erence to `mysql_store_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x56d0): undefined ref erence to `mysql_free_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x56ea): undefined ref erence to `mysql_next_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x58c2): undefined ref erence to `mysql_free_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x58e6): undefined ref erence to `mysql_stmt_close@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5bc0): undefined ref erence to `mysql_stmt_prepare@12' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5ccd): undefined ref erence to `mysql_stmt_init@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5d87): undefined ref erence to `mysql_stmt_param_count@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5da8): undefined ref erence to `mysql_stmt_param_count@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x5fde): undefined ref erence to `mysql_real_query@12' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6164): undefined ref erence to `mysql_store_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x618a): undefined ref erence to `mysql_field_count@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x61af): undefined ref erence to `mysql_field_count@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x620d): undefined ref erence to `mysql_affected_rows@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6277): undefined ref erence to `mysql_fetch_field_direct@8' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6894): undefined ref erence to `mysql_stmt_reset@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6c85): undefined ref erence to `mysql_stmt_param_count@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6ca0): undefined ref erence to `mysql_stmt_param_count@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6cd0): undefined ref erence to `mysql_stmt_execute@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6de5): undefined ref erence to `mysql_stmt_affected_rows@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6e2d): undefined ref erence to `mysql_stmt_bind_result@8' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6e70): undefined ref erence to `mysql_stmt_attr_set@12' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6e92): undefined ref erence to `mysql_stmt_store_result@4' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x6edd): undefined ref erence to `mysql_stmt_bind_result@8' tmp\obj\release_shared\qsql_mysql.o:qsql_mysql.cpp:(.text+0x738a): undefined ref erence to `mysql_stmt_bind_param@8' collect2: ld returned 1 exit status mingw32-make[4]: *** [..\..\..\..\plugins\sqldrivers\qsqlmysql4.dll] Error 1 mingw32-make[4]: Leaving directory `C:/dev/lib/Qt/4.3.1/src/plugins/sqldrivers/m ysql' mingw32-make[3]: *** [release] Error 2 mingw32-make[3]: Leaving directory `C:/dev/lib/Qt/4.3.1/src/plugins/sqldrivers/m ysql' mingw32-make[2]: *** [sub-mysql-make_default] Error 2 mingw32-make[2]: Leaving directory `C:/dev/lib/Qt/4.3.1/src/plugins/sqldrivers' mingw32-make[1]: *** [sub-sqldrivers-make_default] Error 2 mingw32-make[1]: Leaving directory `C:/dev/lib/Qt/4.3.1/src/plugins' mingw32-make: *** [sub-plugins-make_default-ordered] Error 2 2)После добавления опции -D "C:/mysql/include/libmysql.def" компиляция завершилась с другой ошибкой, но намного быстрее... ../../../include/QtCore/../../src/corelib/tools/qlocale.h:499: error: non-member function `QString toString(const QDate&, FormatType)' cannot have `const' metho d qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:500: error: non-member function `QString toString(const QTime&, const QString&)' cannot have `const' m ethod qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:501: error: non-member function `QString toString(const QTime&, FormatType)' cannot have `const' metho d qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:503: error: non-member function `QString dateFormat(FormatType)' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:504: error: non-member function `QString timeFormat(FormatType)' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:506: error: non-member function `QChar decimalPoint()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:507: error: non-member function `QChar groupSeparator()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:508: error: non-member function `QChar percent()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:509: error: non-member function `QChar zeroDigit()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:510: error: non-member function `QChar negativeSign()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:511: error: non-member function `QChar exponential()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:513: error: non-member function `QString monthName(int, FormatType)' cannot have `const' method qualif ier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:514: error: non-member function `QString dayName(int, FormatType)' cannot have `const' method qualifie r ../../../include/QtCore/../../src/corelib/tools/qlocale.h:516: error: non-member function `bool operator==(const QLocale&)' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:516: error: `bool oper ator==(const QLocale&)' must take exactly two arguments ../../../include/QtCore/../../src/corelib/tools/qlocale.h:517: error: non-member function `bool operator!=(const QLocale&)' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:517: error: `bool oper ator!=(const QLocale&)' must take exactly two arguments ../../../include/QtCore/../../src/corelib/tools/qlocale.h:519: error: `Language' was not declared in this scope ../../../include/QtCore/../../src/corelib/tools/qlocale.h: In function `QLocale c()': ../../../include/QtCore/../../src/corelib/tools/qlocale.h:523: error: expected p rimary-expression before '(' token ../../../include/QtCore/../../src/corelib/tools/qlocale.h:523: error: expected p rimary-expression before ':' token ../../../include/QtCore/../../src/corelib/tools/qlocale.h: At global scope: ../../../include/QtCore/../../src/corelib/tools/qlocale.h:526: error: `Language' was not declared in this scope ../../../include/QtCore/../../src/corelib/tools/qlocale.h:529: error: non-member function `NumberOptions numberOptions()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:531: error: expected u nqualified-id before "private" ../../../include/QtCore/../../src/corelib/tools/qlocale.h:531: error: expected ` ,' or `;' before "private" ../../../include/QtCore/../../src/corelib/tools/qlocale.h:536: error: non-member function `const QLocalePrivate* d()' cannot have `const' method qualifier ../../../include/QtCore/../../src/corelib/tools/qlocale.h:537: error: expected d eclaration before '}' token ../../../include/QtCore/../../src/corelib/tools/qlocale.h:520: warning: 'QString countryToString(Country)' declared `static' but never defined ../../../include/QtCore/../../src/corelib/tools/qlocale.h:521: warning: 'void se tDefault(const QLocale&)' declared `static' but never defined ../../../include/QtCore/../../src/corelib/tools/qlocale.h:523: warning: 'QLocale c()' defined but not used ../../../include/QtCore/../../src/corelib/tools/qlocale.h:524: warning: 'QLocale system()' declared `static' but never defined In file included from ../../../include/QtCore/qlocale.h:1, from ..\..\corelib\kernel\qmetatype.cpp:30: ../../../include/QtCore/../../src/corelib/tools/qlocale.h:22:1: unterminated #if ndef mingw32-make[2]: *** [release\qmetatype.o] Error 1 mingw32-make[2]: Leaving directory `C:/dev/lib/Qt/4.3.1/src/tools/moc' mingw32-make[1]: *** [release] Error 2 mingw32-make[1]: Leaving directory `C:/dev/lib/Qt/4.3.1/src/tools/moc' mingw32-make: *** [sub-moc-make_default-ordered] Error 2 3)Со вчерашней сборки меня смущает размер библиотек QT4.3.1. Собирал c -release -shared. Может быть специальными опциями можно их как-то уменьшить? 05.09.2007 18:50 671 486 libQAxContainer.a 05.09.2007 18:50 535 964 libQAxServer.a 05.09.2007 18:47 3 894 818 libQt3Support4.a 04.09.2007 19:19 18 700 libQtAssistantClient4.a 05.09.2007 18:28 1 854 778 libQtCore4.a 04.09.2007 19:26 2 402 866 libQtDesigner4.a 04.09.2007 19:29 12 636 libQtDesignerComponents4.a 05.09.2007 18:39 7 181 060 libQtGui4.a 05.09.2007 18:20 4 654 libqtmain.a 05.09.2007 18:41 326 048 libQtNetwork4.a 05.09.2007 18:44 162 232 libQtOpenGL4.a 05.09.2007 18:43 129 452 libQtScript4.a 05.09.2007 18:40 299 306 libQtSql4.a 05.09.2007 18:41 88 590 libQtSvg4.a 04.09.2007 19:22 40 782 libQtTest4.a 04.09.2007 19:23 1 114 276 libQtUiTools.a 04.09.2007 19:23 9 909 670 libQtUiToolsd.a 05.09.2007 18:28 446 590 libQtXml4.a 05.09.2007 18:48 3 392 000 Qt3Support4.dll 04.09.2007 19:19 42 496 QtAssistantClient4.dll 05.09.2007 18:28 2 074 112 QtCore4.dll 04.09.2007 19:26 2 257 920 QtDesigner4.dll 04.09.2007 19:29 1 845 760 QtDesignerComponents4.dll 05.09.2007 18:40 9 094 144 QtGui4.dll 05.09.2007 18:41 558 592 QtNetwork4.dll 05.09.2007 18:44 499 712 QtOpenGL4.dll 05.09.2007 18:43 1 253 888 QtScript4.dll 05.09.2007 18:40 291 328 QtSql4.dll 05.09.2007 18:41 417 792 QtSvg4.dll 04.09.2007 19:22 74 752 QtTest4.dll 05.09.2007 18:28 499 200 QtXml4.dll |
Сообщ.
#6
,
|
|
|
JavaStudent, configure делал с -l mysql.dll или -l mysql? По идее должно быть второе. Тогда по идее будет всё гут.
Добавлено 3) Размеры нормальные. Сверься с установочной версией. |
Сообщ.
#7
,
|
|
|
Цитата archimed7592 @ По идее должно быть второе. так и было... сначала так, вроде всё было гут, но выдал ошибку см.выше configure.exe ... -shared ... -I "C:/pgsql/include" -L "C:/pgsql/lib" -l "pq" -plugin-sql-psql -I "C:/mysql/include" -L "C:/mysql/lib/opt" -l "mysql" -plugin-sql-mysql потом так, надеялся ему определения подсунуть, вообще на этапе moc свалился configure.exe ... -shared ... -I "C:/pgsql/include" -L "C:/pgsql/lib" -l "pq" -plugin-sql-psql -D "C:/mysql/include/libmysql.def" -I "C:/mysql/include" -L "C:/mysql/lib/opt" -l "mysql" -plugin-sql-mysql это знак! Добавлено Цитата archimed7592 @ Размеры нормальные. Сверься с установочной версией. Значительно больше чем в 4.2.3. Тенденция однако! |
Сообщ.
#8
,
|
|
|
Цитата JavaStudent @ Забыл сообщить, что версия MySQL 6.0 А она вообще поддерживается в Qt? Это ведь сырая альфа версия. Лучше ставь 5.0. |
Сообщ.
#9
,
|
|
|
Цитата gruy @ А она вообще поддерживается в Qt? Это ведь сырая альфа версия. Лучше ставь 5.0. По всей доступной инфе, она и 5.0 не поддерживает... Где сказано, что QT4.3.1 поддерживает MySQL 5.* ? Если бы дело было в версии, которая, кстати, явно прописана в def, то наверное конфигуратор прямо так и сказал, что версия не поддерживается. Ошибки какие то странные лезут, как будто ей def до лампочки. Я уже ему и нормальный def подсунул и новый libmysql.a(112790 байт) собрал (первый килобайтный был неправильный). Сначала я не обнаружил reimp ни в MinGW ни в MSYS, хотя везде пишут, что эта утилита идет в их составе. Дистрибутивы самые новые и это меня озадачивает. Взял reimp из комплекта Code::Block, хотя версия может отличаться и наверное будут проблемы... reimp -d libmysql.lib - никак не удалось заставить создать def, поэтому я скопировал тот def который идет в поставке mysql, затем выполнил dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a получил сообщение о версии 6.0 создаваемой библиотеки и библиотека libmysql.a(112790 байт) создалась. Затем выполнил сборку драйвера по отдельности (при сборке вместе с библиотекой QT ошибка таже самая) cd c:/dev/lib/qt/4.3.1/src/plugins/sqldrivers/mysql qmake -o Makefile -win32 "INCLUDEPATH+=C:/webserver/mysql60/include" "LIBS+=-LC:/webserver/mysql60/lib/opt -lmysql" mysql.pro mingw32-make и получил опять туже ошибку tmp/obj/release_shared/qsql_mysql.o:qsql_mysql.cpp:(.text+0x6e92): undefined reference to `mysql_stmt_store_result@4' tmp/obj/release_shared/qsql_mysql.o:qsql_mysql.cpp:(.text+0x6edd): undefined reference to `mysql_stmt_bind_result@8' tmp/obj/release_shared/qsql_mysql.o:qsql_mysql.cpp:(.text+0x738a): undefined reference to `mysql_stmt_bind_param@8' collect2: ld returned 1 exit status mingw32-make[1]: *** [../../../../plugins/sqldrivers/qsqlmysql4.dll] Error 1 mingw32-make[1]: Leaving directory `c:/dev/lib/qt/4.3.1/src/plugins/sqldrivers/mysql' mingw32-make: *** [release] Error 2 Тоесть, попытаюсь предположить Эти ссылки/вызовы есть в qsql_mysql.cpp, но mingw32-make не может найти соотвествующие функции в libmysql.a ??? При чем тут тогда версия, ведь в новой версии MySQL должны уже быть эти функции. Насколько я помню как раз *stmt* функции появились еще в 4.* и существуют во всех более новых версиях. Мне кажется, проблема в dlltool, который генерит библитеку с несовместимым кодом, например что такое -k? |
Сообщ.
#10
,
|
|
|
Получилось...
Судя по всему, теперь самый новый mingw32 (5.1.3) совместим c lib и dll библиотеками MySQL(которые раньше были несовместимы), не требует преобразования при помощи reimp и dlltool, и работает не по шаблону lib*.a Вместо, как бы правильной, но не работающей версии qmake -o Makefile "INCLUDEPATH+=C:/webserver/mysql60/include" "LIBS+=-LC:/webserver/mysql60/lib/opt -lmysql" mysql.pro Я использовал такую команду qmake -o Makefile "INCLUDEPATH+=C:/webserver/mysql60/include" "LIBS+=C:/webserver/mysql60/lib/opt/libmysql.lib" mysql.pro mingw32-make листинг c:/dev/util/MinGW/bin/mingw32-make -f Makefile.Release mingw32-make[1]: Entering directory `c:/dev/lib/qt/4.3.1/src/plugins/sqldrivers/mysql' g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -shared -Wl,--out-implib,c:/dev/lib/qt/4.3.1/plugins/sqldrivers/libqsqlmysql4.a -o "../../../../plugins/sqldrivers/qsqlmysql4.dll" tmp/obj/release_shared/main.o tmp/obj/release_shared/qsql_mysql.o tmp/obj/release_shared/moc_qsql_mysql.o -L'c:/dev/lib/qt/4.3.1/lib' -L'c:/dev/lib/qt/4.3.1/lib' tmp/obj/release_shared/qsqlmysql_resource_res.o -LC:/webserver/pgsql/lib -lpq -LC:/webserver/mysql60/lib/opt -lmysql C:/webserver/mysql60/lib/opt/libmysql.lib -lQtSql4 -lQtCore4 Creating library file: c:/dev/lib/qt/4.3.1/plugins/sqldrivers/libqsqlmysql4.a mingw32-make[1]: Leaving directory `c:/dev/lib/qt/4.3.1/src/plugins/sqldrivers/mysql' сгенерировались libqsqlmysql4.a (2182) qsqlmysql4.dll (76800) для MySQL 6.0 |