Win7 MInGW QT Программа MySQL кричит «не могу найти -lqsqlmysqld»; где находится отсутствующая библиотека?

Я пытаюсь создать программу qt для Windows 7, которая использует плагин MySQL.

Я без проблем скомпилировал как плагин qt, так и плагин mysql, используя мой 32-битный компилятор minGW

Однако я продолжаю получать ошибку, подобную этой:

mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Users/dhatt/Desktop/testdb2'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -    I"..\..\..\..\QT\qt\include\QtCore" -I"..\..\..\..\QT\qt\include\QtGui" -I"..\..\..\..\QT\qt\include\QtSql" -I"..\..\..\..\QT\qt\include" -I"..\..\..\..\MySQL\bin" -I"..\..\..\..\QT\qt\include\ActiveQt" -I"debug" -I"..\..\..\..\QT\qt\mkspecs\win32-g++" -o debug\database.o database.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\testdb2.exe debug/database.o  -L"c:\QT\qt\lib" -lmingw32 -lqtmaind -L C:\MySQL\lib\opt -LC:/QT/qt/plugins/sqldrivers -lqsqlmysqld -lQtSqld4 -lQtGuid4 -lQtCored4 -LC:\MySQL\lib\opt
C:/qt/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lqsqlmysqld
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\executable.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Users/dhatt/Desktop/testdb2'
mingw32-make: *** [debug] Error 2

Я заранее прошу прощения за то, что очень многословно то, что я сделал, но я делаю это частично для устранения неполадок, и частично, чтобы другие потерянные души не делали этого. в конечном итоге тратить три недели на эту конкретную проблему. :)

Вот мои характеристики: html # the-plugin-cache

http://ubuntuforums.org/showthread.php?t=1070155

Если есть какая-то путаница, между двумя вариантами компиляции (создание библиотек mysql статически или в качестве плагина) ), Я выбрал плагин, потому что он компилируется быстрее, и мне не нужно беспокоиться о лицензировании.

Как правило, большая проблема mysql для большинства людей заключается в создании библиотеки, совместимой с mingw. Обычно я делал это с помощью инструментов mingw в ( https://olex.openlogic.com/packages/mingw-utils ) ...

c:\> cd MySQL\lib\opt
c:\mysql\lib\opt> reimp -d libmysql.lib
c:\mysql\lib\opt> dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k

Я должен был сделать это правильно, так как в моем C: \ MySQL \ lib \ opt, он имеет два файла:

libmysql.a
libmysql.lib
LIBMYSQL.def   (not a typo)

и в каталоге C: \ MySQL \ bin у меня есть:

libmySQL.bin    (not a typo)

Я предварительно скомпилировал плагин mysql:

cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\lib\opt\libmysql.lib" mysql.pro
mingw32-make

В результате у меня есть в моей папке C: \ QT \ qt \ plugins \ sqldrivers:

libqsqlmysql4.a
libqsqlmysqldq4.a
libqsqlodbc4.a
libqsqlodbcd4.a
qsqlmysql4.dll
qsqlmysqld4.dll
qsqlodbc4.dll
qsqlodbc4.dll

И в моей папке C: \ QT \ bin

QtSql4.dll
QtSqld4.dll

Итак, я предполагаю с этого сайта ( http: //www.qtforum.org/article/21352/how-to-compile-use-a-mysql-driver.html), что я правильно понял.

Я не использовал двоичные файлы самой qt Я использовал скомпилированные файлы qt (также от Nokia), но перенастроил и перекомпилировал их, используя mingw32-make. У меня не было ошибок. Это были мои параметры конфигурации для переделки qt.

-opensource
-nomake examples
-nomake demos
-no-sql-lite
-no-qt3support
-no-gif
-no-libpng
-no-libmng
-no-libtiff
-no-phonon
-no-phonon-backend
-no-multimedia
-no-audio-backend
-no-webkit
-no-script
-no-scripttools
-nodeclarative
-plugin-sql-mysql -l mysql -I C:\QT\qt\include -L C:\QT\qt\lib\opt

Вот мой .pro файл

LANGUAGE = C++

TEMPLATE = app
TARGET = executable
QT += core sql
QTPLUGIN += qsqlmysql
DEPENDPATH += .
INCLUDEPATH += C:\MySQL\bin
LIBS += -L C:\MySQL\lib\opt -lmysql

# Input
SOURCES += database.cpp

Я установил плагин, описанный здесь:

C:\QT\qt

Мои переменные пути:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Python26;C:\Linux\Cygwin\bin;C:\mingw-utils-0.3\bin;C:\QT\qt\bin;C:\MySQL\bin;C:\MySQL\include;C:\QT\mingw32\bin;C:\QT\mingw\bin;C:\QT\qt\plugins\sqldrivers

В командной строке qt добавлено несколько дополнительных, поэтому я сделал все это в командной строке.

Setting up a MinGW/Qt only environment...
-- QTDIR set to C:\QT\qt
-- PATH set to C:\QT\qt\bin
-- Adding C:\QT\bin to PATH
-- Adding C:\Windows\System32 to PATH
-- QMAKESPEC set to win32-g++ (mingw is my only compiler so, this is unnecessary)

Хотя я либо все это уже сделал, либо это избыточно. Я добавляю это только для полноты.

Вот мой код (database.cpp):

#include 
#include 
using namespace std;

int main( int argc, char ** argv )
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("---.---.---.---");
    db.setDatabaseName("--------");
    db.setUserName("------------");
    db.setPassword("------------");
    if (!db.open()) cout << "Failed to connect to mysql" << endl;
    else cout << "Works finally." << endl;
    QSqlDatabase::removeDatabase("QMYSQL");
    exit ( 0 );
}

Очень просто, да?

Я пошел в свой каталог с примером кода, запустил

mingw32-make distclean
qmake
mingw32-make

и получил сообщение об ошибке выше. Я' мы пытались создать версию только с версией выпуска (без отладки), и она по-прежнему показывает то же сообщение, но с сообщением «не удается найти -lqsqlmysq», так что это не так.

Я пробовал много вещей, но где я должен смотреть дальше, чтобы решить это; возможно, кто-то может сузить его для меня, установить правильный путь или, что еще лучше, решить его надоедливую проблему.

Кроме того, я планирую использовать привязки python с моим кодом (мне нужен PyQT + MySQL). Если предложенное решение помешает мне сделать это, дайте мне знать.

1
задан Danny Hatt 16 August 2010 в 15:52
поделиться

1 ответ

Ну, я собираюсь решить свою собственную проблему, снова, так что давайте сделаем это весело!

Это твой последний шанс.

После этого пути назад уже не будет.

Вы скачиваете PyQT.exe, и история заканчивается. Вы просыпаетесь в своей постели и верите во все, во что хотите верить. Вы изменяете файл .pro и остаетесь в стране чудес. И я покажу вам, насколько глубока кроличья нора.

В конце концов, я сдался и скачал .exe, который действительно имеет поддержку MySQL из коробки. Если mysql не работает, проблема в вашем приложении, и я рекомендую вам прочитать этот пост здесь ( http://lists.trolltech.com/qt-interest/2006-06/thread00292-0.html ) или следовать цитате ниже:

Проблема в том, что вам либо нужно использовать метод addLibraryPath или
создать экземпляр QCoreApplication перед первым вызовом загрузки базы данных

Поверьте мне, вручную устанавливать PyQT+MySQL на Windows - та еще морока. Но если вам нужен какой-то необычный плагин, о котором не знает исполняемый файл, вам придется спуститься в кроличью нору дальше.

Вот новый и улучшенный .pro файл:

LANGUAGE = C++

TEMPLATE = app
TARGET = executable
QT += core sql
QTPLUGIN += qsqlmysql
DEPENDPATH += .
INCLUDEPATH += C:\MySQL\bin
LIBS += -L C:\MySQL\lib\opt

# Input
SOURCES += database.cpp

Оказалось, что у меня был правильный путь к mysql, я просто перепутал его с .pro файлом, который у меня был. После повторной загрузки qt и повторного выполнения описанных выше шагов, изменение файла .pro сделало всю разницу.

Но теперь мне пришлось скачать SIP и PyQT. Я следовал документации. Возникло еще несколько проблем. Следуйте ссылкам или указаниям, которые оставлены там на случай, если информация будет удалена.

Если ваша установка SIP make имеет ошибку, когда она ищет пути Unix (/usr/bin) вместо путей DOS (C:\QT), посмотрите на эту ссылку http://old.nabble.com/Building-SIP-on-MinGW-:-problem-at-%22make-install%22-td28909249.html#. (короткая версия: проблема в sh.exe в одном из других компиляторов linux, например cygwin или msys, временно измените имя, чтобы заставить make install использовать именование путей DOS):

Если вы настраиваете PyQT и он выдает ошибку файла, связанную с QTCore

Найдите pexports и скачайте. Перейдите в %QTdir%/bin. Затем следуйте инструкциям или ссылке ( http://jeethurao.com/blog/?p=18 )

pexports QtCore4.dll > QtCore4.def
dlltool –dllname QtCore4.dll –def QtCore4.def –output-lib libQtCore4.a
move libQtCore4.a ..\lib

И теперь вы знаете кунг-фу.

P.S: Сам я никогда не пробовал этот метод. Это другой, но непроверенный (мной) метод компиляции PyQT, разработанный троллями из Trolltech: http://www.diotavelli.net/PyQtWiki/InstallingPyQTCommercialWin

2
ответ дан 2 September 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: