2016-10-30 2 views
0

Я хочу связать свою базу данных (mysql) с библиотекой Qt на ubuntu 16.04.
Но я столкнулся с этой ошибкой:Драйвер Qmysql не загружен, но он доступен

QSqlDatabase: QMYSQL driver not loaded 
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7 

Результатом ldd /Qt-PATH/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/libqsqlmysql.so является:

linux-vdso.so.1 => (0x00007fff9d55a000) 
    libmysqlclient_r.so.16 => not found 
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007efc887eb000) 
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007efc885b3000) 
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007efc8839a000) 
    libssl.so.10 => not found 
    libcrypto.so.10 => not found 
    libQt5Sql.so.5 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007efc88154000) 
    libQt5Core.so.5 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007efc87a38000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efc8781b000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efc87499000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efc8718f000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efc86f79000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efc86bb0000) 
    libicui18n.so.56 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007efc86715000) 
    libicuuc.so.56 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007efc8635d000) 
    libicudata.so.56 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007efc8497a000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efc84775000) 
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007efc84573000) 
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007efc8436b000) 
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007efc84059000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000564692881000) 
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007efc83de9000) 

И для решения этого: libmysqlclient_r.so.16 => not found связать его libmysqlclient.so.20.3.2 с этой командой:
cd /usr/lib/x86_64-linux-gnu/ sudo ln -s libmysqlclient.so.20.3.2 libmysqlclient_r.so.16

Моя версия Qt 5,7 линейный режим.

Что мне делать?

ответ

1

Повторить 10 раз:

  1. Я никогда не буду использовать символическую ссылку, чтобы решить недостающую библиотеку проблемы из-за другой игнорирован
  2. Я никогда не буду использовать символическую ссылку, чтобы решить недостающую библиотеку проблемы из-за другой игнорирован
  3. Я никогда не буду использовать символическую ссылку, чтобы решить проблему недостающей библиотеки из-за другой игнорирован
  4. Я никогда не буду использовать символическую ссылку, чтобы решить проблему недостающей библиотеки из-за другой игнорирован
  5. Я никогда не буду использовать символическую ссылку для решения проблемы с отсутствующей библиотекой из-за другого soname.
  6. Я никогда не буду использовать символическую ссылку для решения проблемы с отсутствующей библиотекой из-за другого соната.
  7. Я никогда не буду использовать символическую ссылку для решения проблемы отсутствует библиотека проблемы из-за другой игнорирован
  8. Я никогда не буду использовать символическую ссылку, чтобы решить недостающую библиотеку проблемы из-за другой игнорирован
  9. Я никогда не буду использовать символическую ссылку, чтобы решить недостающую библиотеку проблемы из-за другой игнорирован
  10. Я никогда не буду использовать символическую ссылку для решения проблемы с отсутствующей библиотекой из-за другого соната

Никогда никогда решить такого рода проблемы через символическую ссылку. Если ваша система не предоставляет точное имя, требуемое библиотекой или исполняемым файлом, вам необходимо перекомпилировать эту библиотеку или исполняемый файл. Существует причина, по которой библиотеки имеют номер версии сонатного имени в именах файлов, а несоответствующее имя пользователя приведет к not found для динамического компоновщика/загрузчика. Вы просто нарушаете этот процесс и всю вашу систему, вставив сломанное имя для библиотеки.

Итак, Первое, что нужно сделать: избавиться от символической ссылки, которую вы ввели. Идите в /usr/lib/x86_64-linux-gnu/ и удалите его. Сделайте это сейчас.


Затем, как перекомпилировать плагин так, что он работает на Ubuntu?

(или, фактически, везде.Даже Windows или Mac. Просто адаптируют инструкции)

Шаг за шагом:

  1. Установить пакеты разработки MySQL. На Ubuntu это должен быть пакет libmysqlclient-dev, но дважды проверьте, изменилось ли имя в вашей конкретной версии Ubuntu. Идите по https://packages.ubuntu.com и используйте поиск по файлу, чтобы найти mysql.h.
  2. Запустите средство поддержки у установщика и попросите его также установить компоненты источника Qt. Вы найдете инструмент в своем каталоге установки Qt.
  3. Идите под INSTALL_DIR/Src/5.7/qtbase/src/plugins/sqldrivers/mysql (отрегулируйте INSTALL_DIR и 5.7 на ваш реальный случай).
  4. Пробег qmake. Правильный - тот, который поступает из одной и той же установки Qt и версия которой соответствует источникам. В вашем случае это, вероятно, будет в INSTALL_DIR/5.7/gcc_64/bin/qmake.
  5. Пробег make. Если он не скомпилируется из-за того, что некоторая библиотека не найдена, установите необходимые пакеты в свою систему. Связанный выше пакетный поиск Ubuntu может оказаться полезным.
  6. Как только make успешно работает, он создаст совершенно новый libqsqlmysql.so. Он должен автоматически перезаписать его в INSTALL_DIR/5.7/gcc_64/plugins/sqldrivers. Если по какой-либо причине он не будет автоматически перезаписан, переместите его вручную.

Done! Наслаждайтесь подключением базы данных MySQL.