Russian Qt Forum
Май 02, 2024, 12:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]QMYSQL Дравер Qt5.5  (Прочитано 5421 раз)
BuRn
Гость
« : Сентябрь 08, 2015, 10:54 »

Доброе утро! Подскажите, куда копнуть. Пробую загрузить драйвер, говорит следующее:
Код:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QMYSQL QMYSQL3 QSQLITE QPSQL QPSQL7
Сам драйвер в папке лежит, но ldd показывает следующее:
Код:
	linux-vdso.so.1 =>  (0x00007ffdb47b7000)
libmysqlclient_r.so.16 => not found
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa8b665f000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa8b6426000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fa8b620c000)
libssl.so.10 => not found
libcrypto.so.10 => not found
libQt5Sql.so.5 => /home/burn/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007fa8b5fcc000)
libQt5Core.so.5 => /home/burn/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007fa8b5887000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa8b5669000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa8b5365000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa8b505f000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa8b4e49000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa8b4a84000)
libicui18n.so.54 => /home/burn/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.54 (0x00007fa8b4616000)
libicuuc.so.54 => /home/burn/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.54 (0x00007fa8b4268000)
libicudata.so.54 => /home/burn/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.54 (0x00007fa8b283e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa8b263a000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fa8b2438000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa8b2230000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fa8b1f28000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa8b6a8a000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa8b1cea000)
Пробовал создать ссылки на библиотеки, которые  => not found, результат аналогичен.Решил дальше не заморачиваться со ссылками, собрал драйвер вручную, все собралось. На новой библиотеке ldd уже не показывает таких штук: => not found, там все ок. Подкладываю собранную библиотеку в папку с плагинами, за место дистрибутивной библиотеки, получаю аналогичный результат.  Куда копнуть, складывается ощущение что просто не хватает какого-то пакета ?
« Последнее редактирование: Сентябрь 08, 2015, 14:29 от BuRn » Записан
Aleksey_A
Гость
« Ответ #1 : Сентябрь 08, 2015, 11:10 »

Код:
libmysqlclient_r.so.16 => not found
Видимо не стоит пакет mysql-client (в вашей системе может по другому называться)
« Последнее редактирование: Сентябрь 08, 2015, 11:17 от Aleksey_A » Записан
BuRn
Гость
« Ответ #2 : Сентябрь 08, 2015, 11:17 »

Код:
libmysqlclient_r.so.16 => not found
Видимо не стоит пакет mysql-client (в вашей системе может по другому называться)
Вы внимательно почитали ? Я же написал что пересобрал драйвер и все ок, все есть, просто другая версия
Записан
Aleksey_A
Гость
« Ответ #3 : Сентябрь 08, 2015, 12:32 »

Вы пересобрали драйвер, но клиентские библиотеки libmysqlclient.so*, которые требуется для его работы, видимо, не находится в PATH.
Кроме самого драйвера (libqsqlmysql.so) нужны еще и библиотеки клиента MySQL.
« Последнее редактирование: Сентябрь 08, 2015, 12:35 от Aleksey_A » Записан
BuRn
Гость
« Ответ #4 : Сентябрь 08, 2015, 12:51 »

Вы пересобрали драйвер, но клиентские библиотеки libmysqlclient.so*, которые требуется для его работы, видимо, не находится в PATH.
Кроме самого драйвера (libqsqlmysql.so) нужны еще и библиотеки клиента MySQL.
Опять, не в этом причина:
Код:
	linux-vdso.so.1 =>  (0x00007fff47fb5000)
libmysqlclient.so.18 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 (0x00007f0848267000)
libQt5Sql.so.5 => /home/burn/Qt/5.5/gcc_64/lib/libQt5Sql.so.5 (0x00007f0848027000)
libQt5Core.so.5 => /home/burn/Qt/5.5/gcc_64/lib/libQt5Core.so.5 (0x00007f08478e2000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f08475de000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0847219000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f0847000000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0846dfc000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0846bde000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f08468d8000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f08466c2000)
libicui18n.so.54 => /home/burn/Qt/5.5/gcc_64/lib/libicui18n.so.54 (0x00007f0846254000)
libicuuc.so.54 => /home/burn/Qt/5.5/gcc_64/lib/libicuuc.so.54 (0x00007f0845ea6000)
libicudata.so.54 => /home/burn/Qt/5.5/gcc_64/lib/libicudata.so.54 (0x00007f084447c000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f084427a000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0844072000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f0843d6a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f08489b1000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f0843b2c000)
Записан
Aleksey_A
Гость
« Ответ #5 : Сентябрь 08, 2015, 13:37 »

Попробуйте может такой вариант:
В main.cpp поставить принудительно пути поиска библиотек в каталоге бинарника и в подкаталоге sqldrivers

Код:
#include "mainwindow.h"
#include <QApplication>
#include <QDir>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString binaryDir = QCoreApplication::applicationDirPath();
    QStringList paths;
    paths << QDir::toNativeSeparators(binaryDir);
    paths << QDir::toNativeSeparators(binaryDir + "/sqldrivers");
    QCoreApplication::setLibraryPaths(paths);

    MainWindow w;
    w.show();

    return a.exec();
}

В каталог бинарника скопировать libmysqlclient*, в каталог sqldrivers - сам драйвер, libqsqlmysql.so.
Как-то так:


(Накидал по быстрому - вроде нет ошибок, с MySQL соединяется)
Записан
BuRn
Гость
« Ответ #6 : Сентябрь 08, 2015, 14:22 »

Спасибо! Дело действительно было видимо в PATH. Хотя достаточно подложить сам драйвер в папку с бинарем и добавить пути.
Но теперь нужно докопаться до конца, в случае если в QCoreApplication::libraryPaths(); находится это:
("/home/burn/Qt/5.5/gcc_64/plugins", "/home/burn/build-untitled8-Desktop_Qt_5_5_0_GCC_64bit2-Debug"), то я получаю ошибку загрузки драйвера, хотя драйвер лежит в папке с бинарем, но если я перетираю эти пути и оставляю только ("/home/burn/build-untitled8-Desktop_Qt_5_5_0_GCC_64bit2-Debug"), то загружается все успешно. Честно сказать как-то не понятно
UPD:Такая ситуация возникла в связи с тем, что старый драйвер я не убрал с папки, просто переименовал его, т.е. в папке /home/burn/Qt/5.5/gcc_64/plugins лежало два драйвера, старый(у которого проблемы с библиотеками) и новый, в котором нет проблем, и видимо брался как раз таки все же старый
« Последнее редактирование: Сентябрь 08, 2015, 14:26 от BuRn » Записан
Aleksey_A
Гость
« Ответ #7 : Сентябрь 08, 2015, 14:36 »

Да не за что. Хотя и правда интересно, как после переименования грузился старый драйвер?
UPDATE:
А причина возможно в переименовании все-таки (как ни странно). Положил 2 драйвера, тот, что меньше по размеру - плохой. При переименовании "слева" - не работает, грузится плохой драйвер. При переименовании "справа" - все ОК. Видимо, как то странно идет поиск драйвера, кажется грузится первый попавшийся драйвер, оканчивающийся на *libqsqlmysql.so.

З.Ы. Неожиданно... Надо запомнить на будущее, может еще что-то так же не будет грузится Улыбающийся
« Последнее редактирование: Сентябрь 08, 2015, 15:04 от Aleksey_A » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 21.