Win7的MinGW的QT的MySQL程序尖叫“找不到-lqsqlmysqld”; 哪里是缺少库

2019-09-25 20:15发布

我试图让Windows 7上一个Qt程序使用了一个MySQL插件。

我已经编译Qt和MySQL的插件使用我的MinGW的32位编译器没有问题。

不过,我不断收到这样的错误:

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

我提前道歉是非常详细的我做什么,但我这样做部分是为了排除故障,部分所以任何其他迷失的灵魂最终不会在这个特殊的问题浪费了三个星期。 :)

这里是我的规格:

Windows 7 Nokia's Open Source QT
Qt SDK for Windows (C:\Qt\2010.04\qt)
Linux MinGW Version 5.1.6 (C\Linux\MinGW)
MySQL5 with C++ files (C:\MySQL5)

如果你想知道我是怎么Qt安装,只要按照这个网站的说明:

http://www.jiggerjuice.net/software/qt-sql-drivers.html

这些网站可能会举行一些额外的信息花絮:

http://doc.qt.nokia.com/4.6/sql-driver.html

http://www.rag.com.au/linux/qt4howto.html

http://qtnode.net/wiki?title=Qt4_on_Windows (是的,我做了与诺基亚的文档检查!)

http://doc.trolltech.com/qq/qq10-windows-deployment.html

这家伙提及改造qmake的,这我没有做,除非我有一个很好的理由。

http://christopher.rasch-olsen.no/2009/04/14/qt-45-and-mysql-plugin-with-mingw-on-windows-xp/

我已经过一次删除插件缓存,我希望我不会再这样做......

http://doc.trolltech.com/4.2/plugins-howto.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 \选择,它有两个文件:

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 \插件\ 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文件(也来自诺基亚),而是重新配置和使用的mingw32-MAK​​E重新编译他们。 我没有错误。 这对于重塑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 <QtSql>
#include <iostream>
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的)。 如果所提出的解决方案将阻止我这样做,让我知道。

Answer 1:

好了,我要解决我自己的问题,再一次,因此,让这个有趣的!

这是你最后的机会。

在此之后,没有回头路可走。

你下载的PyQT.exe ,故事结束。 你在你的床上醒来,你相信你要相信,不管用。 修改.pro文件,你留在仙境。 而且,我告诉你兔子洞有多深。

我最终放弃了和下载的.exe,它确实有MySQL支持开箱即用。 如果MySQL不工作,你的应用程序的问题,我建议你在这里阅读这篇文章( http://lists.trolltech.com/qt-interest/2006-06/thread00292-0.html )或遵循以下报价:

问题是,你要么必须使用addLibraryPath方法或
您第一次调用之前创建一个QCoreApplication实例来装载数据库

相信我,手动在Windows上安装的PyQt + MySQL是一种痛苦。 但是,如果你需要一些出路插件,以获取该可执行文件不知道,你有进一步下降的兔子洞。

这是新的和改进的.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 install的具有在那里看着Unix的路径(在/ usr / bin中),而不是DOS路径(C:\ QT)的错误,看看这个链接http://old.nabble.com/Building-SIP-上MinGW的- : -问题-原子%22make安装%22#td28909249.html (短版:这个问题是在你的其他Linux编译器一样的cygwin或MSYS之一sh.exe,暂时将名称更改为力化妆安装使用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

现在你知道功夫。

PS:我从来没有尝试过这种方法我自己。 这是编译的PyQt的不同,但未经检验(由我)的方法,由巨魔在奇趣做起来了: http://www.diotavelli.net/PyQtWiki/InstallingPyQTCommercialWin



文章来源: Win7 MInGW QT MySQL program screams “cannot find -lqsqlmysqld”; where is the missing library?