На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> mysql qt , создание плагина
    пытаюсь сделать плагин согласно рецепту
    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 и др
    где эти функции могли затеряться?
      Заголовки и либы самого мускуля развернуты?
        Да. Но их я скопировал в другую папку.
        Как мне кажется компиляция прошла успешно. Почему то либа не переваривается
          При линковке не подхватываются либы импорта мускуля, ЕМНИП.
            а как это лечится?
              Цитата rodion @
              а как это лечится?


              Перво-наперво смотрм линк. Далее глубинное гугление.

              Обратить внимание на:
              1) Подключение путей хидеров и библиотек
              2) Подключение конкретной либы для компоновки

              Подробности: нужно сёрфить и пробовать примеры. Вот тут оч хорошая статья.
                Риторический вопрос а почему не видит?
                Пытаюсь сделать свою либу импорта по рецепту
                Сделал def файл он почему то пустой. Ладно, добавляю функцию для экспорта. делаю либу, толку 0
                  а если через линокс библиотеку? имхо она ближе к мингу :D

                  Добавлено
                  как то так
                  ExpandedWrap disabled
                    g++ "-LC:\\MySQL\\lib" -lmysql ...
                    Какую "линокс библиотеку"? Там только dll и lib
                      Цитата rodion @
                      Какую "линокс библиотеку"? Там только dll и lib

                      libmysql.a :D
                      но если нет такой тогда вот так можно:
                      ExpandedWrap disabled
                        dlltool -C libmySQL.dll -d libmysql.def -l libmySQL.a


                      вот тут видимо пояснение http://ru.vingrad.com/mySQLMinGW-id5091d1cd6ccc19454f016b5b/discussion
                      Сообщение отредактировано: Cfon -
                        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
                          ты меня не понял :D
                          я говорил что надо юзать libmySQL.a а если ее нет то надо создать :)
                          вот еще: http://www.openwebspider.org/documentation/older-versions/how-to-link-libmysqllib-with-dev-c-or-gcc-under-windows/

                          Добавлено
                          а потом подключать libmysql.a вот так:
                          ExpandedWrap disabled
                            g++ "-LC:\\MySQL\\lib" -lmysql ...
                            я её и создал. dlltool -C libmySQL.dll -d libmysql.def -l libmySQL.a
                            как получить имена всех экспортируемых функций из dll?
                              Цитата rodion @
                              я её и создал. dlltool -C libmySQL.dll -d libmysql.def -l libmySQL.a
                              как получить имена всех экспортируемых функций из dll?

                              зачем? :D
                                Цитата rodion @
                                как получить имена всех экспортируемых функций из dll?

                                Открой любым дизассемблером. Например, W32Dasm.
                                Сообщение отредактировано: shm -
                                  а что в libmysql.def их нет? :D
                                    Цитата Cfon @
                                    а что в libmysql.def их нет?

                                    Я в вашу беседу не вникал, если он компилирует длл с ним и синтаксис корректен, то должны быть.
                                      Увы нет.
                                      я пробовал dlltool -z libmysql.def --export-all-symbol libmysql.dll
                                      Но в libmysql.def ни одной функции :-?
                                        Цитата 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
                                        Сообщение отредактировано: shm -
                                          Цитата shm @
                                          1. качаешь mingw-utils
                                          2. выполняешь reimp libmysql.lib
                                          3. получаешь рядом libmysql.a и libmysql.def
                                          4. PROFIT

                                          :yes:
                                            mingw-utils очень плохо гуглятся, в плане скачать
                                              Цитата rodion @
                                              mingw-utils очень плохо гуглятся, в плане скачать

                                              вот :)
                                              http://prdownloads.sourceforge.net/mingw/m...tar.gz?download
                                              Сообщение отредактировано: Cfon -
                                                выполнил первые 3 пункта профит не вышел.
                                                в libmysql.a содержится _mysql_num_row@4, при сборке требуется mysql_num_row@4
                                                  Цитата rodion @
                                                  выполнил первые 3 пункта профит не вышел.
                                                  в libmysql.a содержится _mysql_num_row@4, при сборке требуется mysql_num_row@4

                                                  ты пройди по ссылке что я дал ранее почитай там описан финт :D
                                                  http://www.openwebspider.org/documentation/older-versions/how-to-link-libmysqllib-with-dev-c-or-gcc-under-windows/
                                                    профит вышел получении .def, а дальше.

                                                    Добавлено
                                                    Собственно, что ты и пытался вроде как делать выше.

                                                    Добавлено
                                                    Цитата Cfon @
                                                    ты пройди по ссылке что я дал ранее почитай там описан финт

                                                    Для особо тяжелых случаев, там внизу предлагают скачать готовую версию вместе с dll :D
                                                      Цитата shm @
                                                      Для особо тяжелых случаев, там внизу предлагают скачать готовую версию вместе с dll :D

                                                      ага :D
                                                        def файл всё равно приходится править всякие @4 дописывать приходится
                                                          dll получил, заменил всё равно посылает
                                                            Хорошо, с файлами из той ссылки работает?
                                                              щас проверил свой мускуль 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
                                                              ВСЕ! РАБОТАЕТ КАК ЧАСЫ! :D
                                                                Скорее всего, да, rodion просто не умеет подключать либы к mingw.
                                                                  У меня к сожалению mysql 5.7. Драйвер для mysql я собрал, благодаря вашим советам.
                                                                  В качестве тестового приложения использую пример sqlbrowser. Вот последний говорит что не может загрузить Драйвер для mysql, но драйвер существует.
                                                                      хоть что-то стало понятно.
                                                                      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: Не найден указанный модуль."
                                                                        Попробуй вот такой финт:

                                                                        ExpandedWrap disabled
                                                                          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%
                                                                          Сделай билд либы и проверь лежит ли она по указанным путям. В пост билд евентс добавь qtшную утилиту деплоя, для того, чтобы скопировать все зависимые либы и ресурсы в папку куда был билд приложения.
                                                                          Если не получится, выкладывай проект.
                                                                            Цитата MedEx @
                                                                            В пост билд евентс добавь qtшную утилиту деплоя

                                                                            Поделись, плс, линком на эту инфу, типа "как сделать", или распиши по шагам.
                                                                            Я все делаю вручную - все норм, но не по фэншую это.
                                                                                MedEx, сенкс!
                                                                                  Скопировал 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
                                                                                    Цитата rodion @
                                                                                    У меня к сожалению mysql 5.7.

                                                                                    теперь и у меня тоже мускул 5.7 :D
                                                                                    опробовал его тоже все пучком :)

                                                                                    Цитата 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

                                                                                    :wacko: старик ты протестируй мускул для начала на простом примере типа этого:
                                                                                    ExpandedWrap disabled
                                                                                      #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 :)
                                                                                    Сообщение отредактировано: Cfon -
                                                                                      Cfon, будешь просто адовый кросавело, если сделаешь батник, который выкачивает, устанавливает и собирает все как надо 8-) В качестве качалки лучше всего использовать консольную версию WGet'а.
                                                                                        Цитата JoeUser @
                                                                                        Cfon, будешь просто адовый кросавело, если сделаешь батник, который выкачивает, устанавливает и собирает все как надо 8-) В качестве качалки лучше всего использовать консольную версию WGet'а.

                                                                                        да я вроде все описал для простого случая путем обращения через MySQL C API :)
                                                                                        с Qt щас не имею возможности протестить мускул, а вот MySQL Connector/C++ попробую протестить :D
                                                                                          И как этот простой пример собрать? У меня кроме qt ничего :'( Опять чехарда с либами?
                                                                                            Цитата rodion @
                                                                                            И как этот простой пример собрать? У меня кроме qt ничего :'( Опять чехарда с либами?

                                                                                            как как просто :D
                                                                                            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. ВСЕ! :D

                                                                                            пс. пример тестил на минге 4.9 + мускул 5.7 + notepad++
                                                                                            Сообщение отредактировано: Cfon -
                                                                                              почему нужно обращаться не посредственно к серверу, а не к клиенту?
                                                                                                Цитата rodion @
                                                                                                почему нужно обращаться не посредственно к серверу, а не к клиенту?

                                                                                                к какому клиенту? :huh: конечно же к мускулю
                                                                                                файл libmysql.dll и есть клиент мускуля. Это апи (MySQL C API) между нашей прогой и сервером mysqld.exe
                                                                                                Сообщение отредактировано: Cfon -
                                                                                                  Я установил 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"
                                                                                                    Цитата 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
                                                                                                    в данном случае два клиента :D
                                                                                                    выбирай любой и ложи в папку bin с сервером mysqld.exe (для удобства)
                                                                                                    Сообщение отредактировано: Cfon -
                                                                                                      падает в mysql_init с сообщением об ошибке с кодом 0xc000007b
                                                                                                        кстати у меня мускул 5.7 работает без liblibmysql.a, т.е. никаких движений в плане reimp не нужны, файл статической библиотеки импорта libmysql.lib компилятор g++ хавает без проблем :D
                                                                                                          рад за тебя
                                                                                                            Цитата rodion @
                                                                                                            рад за тебя

                                                                                                            ну я это к тому что дело не в библиотекe libmysql.lib
                                                                                                            а вот MySQL Connector/C++ 1.1.7 мне не удалось опробовать по причине ошибки линковки:
                                                                                                            (.text+0x7): undefined reference to `_imp___ZN3sql5mysql19get_driver_instanceEv' :wacko:

                                                                                                            Добавлено
                                                                                                            и нигде не могут объяснить в чем дело и как бороться :(
                                                                                                              liblibmysql.a используется в обоих проектах
                                                                                                                Цитата rodion @
                                                                                                                liblibmysql.a используется в обоих проектах

                                                                                                                ты о чем? :huh:
                                                                                                                  Mysql api использует libmysql.dll следовательно и liblibmysql.a
                                                                                                                    Цитата rodion @
                                                                                                                    Mysql api использует libmysql.dll следовательно и liblibmysql.a

                                                                                                                    ну и что из того?
                                                                                                                    а у меня libmysql.dll юзит libmysql.lib :D
                                                                                                                    я же писал что все работает без лишнего телодвижения
                                                                                                                    Сообщение отредактировано: Cfon -
                                                                                                                      В очередной раз за тебя. Mingw не видит функции в libmysql.lib
                                                                                                                        Цитата rodion @
                                                                                                                        В очередной раз за тебя. Mingw не видит функции в libmysql.lib

                                                                                                                        :wacko: у меня минг 4.9 почему у меня работает? :D
                                                                                                                        Сообщение отредактировано: Cfon -
                                                                                                                          Цитата Cfon @
                                                                                                                          а вот MySQL Connector/C++ 1.1.7 мне не удалось опробовать по причине ошибки линковки:
                                                                                                                          (.text+0x7): undefined reference to `_imp___ZN3sql5mysql19get_driver_instanceEv' :wacko:
                                                                                                                          и нигде не могут объяснить в чем дело и как бороться :(

                                                                                                                          нашел таки объяснение этому:

                                                                                                                          Цитата 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.
                                                                                                                          Сообщение отредактировано: Cfon -
                                                                                                                            Попробовал использовать 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 типа его нет, хотя лежит в той же директории
                                                                                                                              Может я что не то себе поставил? Я ставил вот это
                                                                                                                              qt-opensource-windows-x86-mingw492-5.5.1.exe
                                                                                                                                Цитата rodion @
                                                                                                                                Может я что не то себе поставил? Я ставил вот это
                                                                                                                                qt-opensource-windows-x86-mingw492-5.5.1.exe

                                                                                                                                нет все то, просто ты не понимаешь что делаешь :yes-sad: и пытаешься решить проблему хаотически, пробуя разные методы не понимая.. вот в чем твоя проблема :(

                                                                                                                                совет бесплатный :D
                                                                                                                                начни уже с простого примера чтоб понять как вообще это работает.
                                                                                                                                Сообщение отредактировано: Cfon -
                                                                                                                                  Тогда объясни почему, то что я установил не хочет переваривать lib файлы. Любые, не только mysql.
                                                                                                                                    Цитата rodion @
                                                                                                                                    Тогда объясни почему, то что я установил не хочет переваривать lib файлы. Любые, не только mysql.

                                                                                                                                    я то откуда знаю! :wacko: у меня все переваривает :whistle:
                                                                                                                                    правда с Qt я не многу проверить, по причине его отсутствия, снес нафиг тяжелая софтина :D
                                                                                                                                    вот толи дело МFС старая гвардия пашет как часы :jokingly:
                                                                                                                                    Сообщение отредактировано: Cfon -
                                                                                                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                    0 пользователей:


                                                                                                                                    Рейтинг@Mail.ru
                                                                                                                                    [ Script execution time: 0,1280 ]   [ 20 queries used ]   [ Generated: 20.04.24, 00:40 GMT ]