Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.195.249] |
|
Сообщ.
#1
,
|
|
|
пытаюсь сделать плагин согласно рецепту
qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\libmysql.lib" mysql.pro C:\Qt\Qt5.5.1\Tools\mingw492_32\bin\mingw32-make.exe получаю сообщение что не хватает функций mysql_num_row@4 и др где эти функции могли затеряться? |
Сообщ.
#2
,
|
|
|
Заголовки и либы самого мускуля развернуты?
|
Сообщ.
#3
,
|
|
|
Да. Но их я скопировал в другую папку.
Как мне кажется компиляция прошла успешно. Почему то либа не переваривается |
Сообщ.
#4
,
|
|
|
При линковке не подхватываются либы импорта мускуля, ЕМНИП.
|
Сообщ.
#5
,
|
|
|
а как это лечится?
|
Сообщ.
#6
,
|
|
|
Цитата rodion @ а как это лечится? Перво-наперво смотрм линк. Далее глубинное гугление. Обратить внимание на: 1) Подключение путей хидеров и библиотек 2) Подключение конкретной либы для компоновки Подробности: нужно сёрфить и пробовать примеры. Вот тут оч хорошая статья. |
Сообщ.
#7
,
|
|
|
Риторический вопрос а почему не видит?
Пытаюсь сделать свою либу импорта по рецепту Сделал def файл он почему то пустой. Ладно, добавляю функцию для экспорта. делаю либу, толку 0 |
Сообщ.
#8
,
|
|
|
а если через линокс библиотеку? имхо она ближе к мингу
Добавлено как то так g++ "-LC:\\MySQL\\lib" -lmysql ... |
Сообщ.
#9
,
|
|
|
Какую "линокс библиотеку"? Там только dll и lib
|
Сообщ.
#10
,
|
|
|
Цитата rodion @ Какую "линокс библиотеку"? Там только dll и lib libmysql.a но если нет такой тогда вот так можно: dlltool -C libmySQL.dll -d libmysql.def -l libmySQL.a вот тут видимо пояснение http://ru.vingrad.com/mySQLMinGW-id5091d1cd6ccc19454f016b5b/discussion |
Сообщ.
#11
,
|
|
|
libmySQL.a перед именем функции _
def файл ; C:\Qt\Qt5.5.1\Tools\mingw492_32\bin\dlltool.exe -z libmysql.def --export-all-symbol libmysql.dll LIBRARY libmysql.dll EXPORTS mysql_num_row@4 |
Сообщ.
#12
,
|
|
|
ты меня не понял
я говорил что надо юзать libmySQL.a а если ее нет то надо создать вот еще: http://www.openwebspider.org/documentation/older-versions/how-to-link-libmysqllib-with-dev-c-or-gcc-under-windows/ Добавлено а потом подключать libmysql.a вот так: g++ "-LC:\\MySQL\\lib" -lmysql ... |
Сообщ.
#13
,
|
|
|
я её и создал. dlltool -C libmySQL.dll -d libmysql.def -l libmySQL.a
как получить имена всех экспортируемых функций из dll? |
Сообщ.
#14
,
|
|
|
Цитата rodion @ я её и создал. dlltool -C libmySQL.dll -d libmysql.def -l libmySQL.a как получить имена всех экспортируемых функций из dll? зачем? |
Сообщ.
#15
,
|
|
|
Цитата rodion @ как получить имена всех экспортируемых функций из dll? Открой любым дизассемблером. Например, W32Dasm. |
Сообщ.
#16
,
|
|
|
а что в libmysql.def их нет?
|
Сообщ.
#17
,
|
|
|
Цитата Cfon @ а что в libmysql.def их нет? Я в вашу беседу не вникал, если он компилирует длл с ним и синтаксис корректен, то должны быть. |
Сообщ.
#18
,
|
|
|
Увы нет.
я пробовал dlltool -z libmysql.def --export-all-symbol libmysql.dll Но в libmysql.def ни одной функции |
Сообщ.
#19
,
|
|
|
Цитата rodion @ dlltool -z libmysql.def --export-all-symbol libmysql.dll Она экспортирует символы из отладочной секции. Если файл собран с ключом -s, то ниче не получится. Добавлено rodion, 1. качаешь mingw-utils 2. выполняешь reimp libmysql.lib 3. получаешь рядом libmysql.a и libmysql.def 4. PROFIT |
Сообщ.
#20
,
|
|
|
Цитата shm @ 1. качаешь mingw-utils 2. выполняешь reimp libmysql.lib 3. получаешь рядом libmysql.a и libmysql.def 4. PROFIT |
Сообщ.
#21
,
|
|
|
mingw-utils очень плохо гуглятся, в плане скачать
|
Сообщ.
#22
,
|
|
|
Цитата rodion @ mingw-utils очень плохо гуглятся, в плане скачать вот http://prdownloads.sourceforge.net/mingw/m...tar.gz?download |
Сообщ.
#23
,
|
|
|
выполнил первые 3 пункта профит не вышел.
в libmysql.a содержится _mysql_num_row@4, при сборке требуется mysql_num_row@4 |
Сообщ.
#24
,
|
|
|
Цитата rodion @ выполнил первые 3 пункта профит не вышел. в libmysql.a содержится _mysql_num_row@4, при сборке требуется mysql_num_row@4 ты пройди по ссылке что я дал ранее почитай там описан финт http://www.openwebspider.org/documentation/older-versions/how-to-link-libmysqllib-with-dev-c-or-gcc-under-windows/ |
Сообщ.
#25
,
|
|
|
профит вышел получении .def, а дальше.
Добавлено Собственно, что ты и пытался вроде как делать выше. Добавлено Цитата Cfon @ ты пройди по ссылке что я дал ранее почитай там описан финт Для особо тяжелых случаев, там внизу предлагают скачать готовую версию вместе с dll |
Сообщ.
#26
,
|
|
|
Цитата shm @ Для особо тяжелых случаев, там внизу предлагают скачать готовую версию вместе с dll ага |
Сообщ.
#27
,
|
|
|
def файл всё равно приходится править всякие @4 дописывать приходится
|
Сообщ.
#28
,
|
|
|
dll получил, заменил всё равно посылает
|
Сообщ.
#29
,
|
|
|
Хорошо, с файлами из той ссылки работает?
|
Сообщ.
#30
,
|
|
|
щас проверил свой мускуль 5.1 с мингом 4.9 все работает линкует все видит
делал так: 1. reimp libmysql.lib (создал линукс либу liblibmysql.a)) 2. создал тестовый проект 3. указал путь к инклудам: -I"С:\MySQL\MySQL Server 5.1\include" 4. указал путь к либе liblibmysql.a: -L"С:\MySQL\MySQL Server 5.1\lib\opt" 5. указал (важно!) имя либы в такой форме: -llibmysql ВСЕ! РАБОТАЕТ КАК ЧАСЫ! |
Сообщ.
#31
,
|
|
|
Скорее всего, да, rodion просто не умеет подключать либы к mingw.
|
Сообщ.
#32
,
|
|
|
У меня к сожалению mysql 5.7. Драйвер для mysql я собрал, благодаря вашим советам.
В качестве тестового приложения использую пример sqlbrowser. Вот последний говорит что не может загрузить Драйвер для mysql, но драйвер существует. |
Сообщ.
#34
,
|
|
|
хоть что-то стало понятно.
1. признало что мой qsqlmysqld.dll плагин 2. чего то не хватает. QLibraryPrivate::loadPlugin failed on "C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll" : "Cannot load library C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll: Не найден указанный модуль." |
Сообщ.
#35
,
|
|
|
Попробуй вот такой финт:
int main(int argc, char *argv[]) { QApplication App(argc, argv); ///////////////////////////////////////////////////////////////////////// // создай рядом с __исполняемым__ файлом каталоги: // plugins/platforms // qminimal.dll // qoffscreen.dll // qwindows.dll // plugins/sqldrivers // твои драйвера ///////////////////////////////////////////////////////////////////////// QStringList PathList = App.libraryPaths(); PathList.append(App.applicationDirPath() +"/plugins"); App.setLibraryPaths(PathList); ///////////////////////////////////////////////////////////////////////// QTextCodec *codec = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForLocale(codec); QDir::setCurrent(qApp->applicationDirPath()); MainWindow *AppMainWindow = new MainWindow(); AppMainWindow->show(); return App.exec(); } Добавлено Add: dll-ку от MySQL положи либо рядом с исполняемым файлом, либо в любой другой каталог из %PATH% |
Сообщ.
#36
,
|
|
|
Сделай билд либы и проверь лежит ли она по указанным путям. В пост билд евентс добавь qtшную утилиту деплоя, для того, чтобы скопировать все зависимые либы и ресурсы в папку куда был билд приложения.
Если не получится, выкладывай проект. |
Сообщ.
#37
,
|
|
|
Цитата MedEx @ В пост билд евентс добавь qtшную утилиту деплоя Поделись, плс, линком на эту инфу, типа "как сделать", или распиши по шагам. Я все делаю вручную - все норм, но не по фэншую это. |
Сообщ.
#39
,
|
|
|
MedEx, сенкс!
|
Сообщ.
#40
,
|
|
|
Скопировал C:\Program Files\MySQL\MySQL Connector.C 6.1\lib\libmysql.dll к исполняему файлу
послали в другое место QLibraryPrivate::loadPlugin failed on "C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll" : "Cannot load library C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll: %1 не является приложением Win32." Попробовал сделать либу используя только reimp reimp --dlltool C:\Qt\Qt5.5.1\Tools\mingw492_32\bin\dlltool.exe libmysql.lib получил файл Прикреплённый файлdcfdh.s (461 байт, скачиваний: 124) была выдана ошибка CreateProcess |
Сообщ.
#41
,
|
|
|
Цитата rodion @ У меня к сожалению mysql 5.7. теперь и у меня тоже мускул 5.7 опробовал его тоже все пучком Цитата rodion @ Скопировал C:\Program Files\MySQL\MySQL Connector.C 6.1\lib\libmysql.dll к исполняему файлу послали в другое место QLibraryPrivate::loadPlugin failed on "C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll" : "Cannot load library C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers/qsqlmysqld.dll: %1 не является приложением Win32." Попробовал сделать либу используя только reimp reimp --dlltool C:\Qt\Qt5.5.1\Tools\mingw492_32\bin\dlltool.exe libmysql.lib получил файл Прикреплённый файлdcfdh.s (461 байт, скачиваний: 124) была выдана ошибка CreateProcess старик ты протестируй мускул для начала на простом примере типа этого: #include <cstdio> #include <windows.h> #include <mysql.h> MYSQL mysql; MYSQL_RES* res; MYSQL_ROW row; void exiterr(int exitcode) { printf("%s\n", mysql_error(&mysql)); exit(exitcode); } int main(){ if (!mysql_init(&mysql)) abort(); if (!(mysql_real_connect(&mysql, "localhost", "root", "password", "testdb", 3306, NULL, 0))) exiterr(1); if (mysql_select_db(&mysql,"testdb")) exiterr(2); if (mysql_query(&mysql,"select * from test")) exiterr(3); if (!(res = mysql_store_result(&mysql))) exiterr(4); while((row = mysql_fetch_row(res))) { for (int i = 0; i < mysql_num_fields(res); i++) printf("%s\t",row[i]); printf("\n"); } if (!mysql_eof(res)) exiterr(5); mysql_free_result(res); mysql_close(&mysql); } а потом пробуй с Qt |
Сообщ.
#42
,
|
|
|
Cfon, будешь просто адовый кросавело, если сделаешь батник, который выкачивает, устанавливает и собирает все как надо В качестве качалки лучше всего использовать консольную версию WGet'а.
|
Сообщ.
#43
,
|
|
|
Цитата JoeUser @ Cfon, будешь просто адовый кросавело, если сделаешь батник, который выкачивает, устанавливает и собирает все как надо В качестве качалки лучше всего использовать консольную версию WGet'а. да я вроде все описал для простого случая путем обращения через MySQL C API с Qt щас не имею возможности протестить мускул, а вот MySQL Connector/C++ попробую протестить |
Сообщ.
#44
,
|
|
|
И как этот простой пример собрать? У меня кроме qt ничего Опять чехарда с либами?
|
Сообщ.
#45
,
|
|
|
Цитата rodion @ И как этот простой пример собрать? У меня кроме qt ничего Опять чехарда с либами? как как просто 1. создаешь консольное приложение 2. копипастишь мой пример 3. прописвашь настройки компилятора: g++ example.cpp -o example.exe "-IC:/MySQL/MySQL Server 5.7/include" "-LC:/MySQL/MySQL Server 5.7/lib" -llibmysql 4.чтобы работало надо подключать liblibmysql.a, для этого запускаешь в консоле reimp.exe libmysql.lib она создаст два файла (liblibmysql.a и libmysql.def) но нужен один liblibmysql.a когда указываешь опцию -l для g++ то обрати внимание на то что вместо liblibmysql.a указывается только libmysql, т.е -llibmysql, все эти настройки можно естесно делать из IDE. Кстати какой у тебя IDE? 5. не забудь прописать путь в переменную окружения виндос PATH=C:/MySQL/MySQL Server 5.7/bin;... 6. в папке bin должен лежать длл: libmysql.dll 7. создай через консоль mysql.exe: БД testdb и таблицу test и заполни ее чем нибудь 8. ВСЕ! пс. пример тестил на минге 4.9 + мускул 5.7 + notepad++ |
Сообщ.
#46
,
|
|
|
почему нужно обращаться не посредственно к серверу, а не к клиенту?
|
Сообщ.
#47
,
|
|
|
Цитата rodion @ почему нужно обращаться не посредственно к серверу, а не к клиенту? к какому клиенту? файл libmysql.dll и есть клиент мускуля. Это апи (MySQL C API) между нашей прогой и сервером mysqld.exe |
Сообщ.
#48
,
|
|
|
Я установил MySQL полностью. libmysql.dll присутствует в 2 экземплярах, и они разные. Для чего они?
"C:\Program Files\MySQL\MySQL Server 5.7\lib\libmysql.dll" "C:\Program Files\MySQL\MySQL Connector.C 6.1\lib\libmysql.dll" |
Сообщ.
#49
,
|
|
|
Цитата rodion @ Я установил MySQL полностью. libmysql.dll присутствует в 2 экземплярах, и они разные. Для чего они? "C:\Program Files\MySQL\MySQL Server 5.7\lib\libmysql.dll" "C:\Program Files\MySQL\MySQL Connector.C 6.1\lib\libmysql.dll" я же выше написал libmysql.dll клиент мускуля в нем MySQL API в данном случае два клиента выбирай любой и ложи в папку bin с сервером mysqld.exe (для удобства) |
Сообщ.
#50
,
|
|
|
падает в mysql_init с сообщением об ошибке с кодом 0xc000007b
|
Сообщ.
#51
,
|
|
|
кстати у меня мускул 5.7 работает без liblibmysql.a, т.е. никаких движений в плане reimp не нужны, файл статической библиотеки импорта libmysql.lib компилятор g++ хавает без проблем
|
Сообщ.
#52
,
|
|
|
рад за тебя
|
Сообщ.
#53
,
|
|
|
Цитата rodion @ рад за тебя ну я это к тому что дело не в библиотекe libmysql.lib а вот MySQL Connector/C++ 1.1.7 мне не удалось опробовать по причине ошибки линковки: (.text+0x7): undefined reference to `_imp___ZN3sql5mysql19get_driver_instanceEv' Добавлено и нигде не могут объяснить в чем дело и как бороться |
Сообщ.
#54
,
|
|
|
liblibmysql.a используется в обоих проектах
|
Сообщ.
#55
,
|
|
|
Цитата rodion @ liblibmysql.a используется в обоих проектах ты о чем? |
Сообщ.
#56
,
|
|
|
Mysql api использует libmysql.dll следовательно и liblibmysql.a
|
Сообщ.
#57
,
|
|
|
Цитата rodion @ Mysql api использует libmysql.dll следовательно и liblibmysql.a ну и что из того? а у меня libmysql.dll юзит libmysql.lib я же писал что все работает без лишнего телодвижения |
Сообщ.
#58
,
|
|
|
В очередной раз за тебя. Mingw не видит функции в libmysql.lib
|
Сообщ.
#59
,
|
|
|
Цитата rodion @ В очередной раз за тебя. Mingw не видит функции в libmysql.lib у меня минг 4.9 почему у меня работает? |
Сообщ.
#60
,
|
|
|
Цитата Cfon @ а вот MySQL Connector/C++ 1.1.7 мне не удалось опробовать по причине ошибки линковки: (.text+0x7): undefined reference to `_imp___ZN3sql5mysql19get_driver_instanceEv' и нигде не могут объяснить в чем дело и как бороться нашел таки объяснение этому: Цитата 25.8.4.1 Building C API Client Programs If you get undefined-reference errors such as the following for functions that do not exist on your system, it usually means that your MySQL client library was compiled on a system that is not 100% compatible with yours: mf_format.o(.text+0x201): undefined reference to `__lxstat' In this case, you should download the latest MySQL or Connector/C source distribution and compile the MySQL client library yourself. See Section 2.9, “Installing MySQL from Source”, and MySQL Connector/C Developer Guide. |
Сообщ.
#61
,
|
|
|
Попробовал использовать lib файлы. Согласно 25.8.4.1 Building C API Client Programs Добавил в проект qt mysqlclient.lib и libmysql.lib
как не видела так и не видит D:\Work\sql\testapi\testapi\main.cpp:21: ошибка: undefined reference to `mysql_init@4' пробовал gcc согласно той же инструкции. gcc -o main.cpp main.o `mysql_config --libs' матерится на mysql_config.pl типа его нет, хотя лежит в той же директории |
Сообщ.
#62
,
|
|
|
Может я что не то себе поставил? Я ставил вот это
qt-opensource-windows-x86-mingw492-5.5.1.exe |
Сообщ.
#63
,
|
|
|
Цитата rodion @ Может я что не то себе поставил? Я ставил вот это qt-opensource-windows-x86-mingw492-5.5.1.exe нет все то, просто ты не понимаешь что делаешь и пытаешься решить проблему хаотически, пробуя разные методы не понимая.. вот в чем твоя проблема совет бесплатный начни уже с простого примера чтоб понять как вообще это работает. |
Сообщ.
#64
,
|
|
|
Тогда объясни почему, то что я установил не хочет переваривать lib файлы. Любые, не только mysql.
|
Сообщ.
#65
,
|
|
|
Цитата rodion @ Тогда объясни почему, то что я установил не хочет переваривать lib файлы. Любые, не только mysql. я то откуда знаю! у меня все переваривает правда с Qt я не многу проверить, по причине его отсутствия, снес нафиг тяжелая софтина вот толи дело МFС старая гвардия пашет как часы |