gpt4 book ai didi

mysql - Win7 MInGW QT MySQL 程序尖叫 "cannot find -lqsqlmysqld";失踪的图书馆在哪里?

转载 作者:行者123 更新时间:2023-11-29 07:12:46 26 4
gpt4 key购买 nike

我正在尝试在使用 MySQL 插件的 Windows 7 上制作一个 qt 程序。

我使用我的 minGW 32 位编译器编译了 qt 和 mysql 插件,没有任何问题。

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

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兼容库。通常,我使用 ( https://olex.openlogic.com/packages/mingw-utils ) 中的 mingw 工具来完成此操作...

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 文件(也来自诺基亚),但是使用 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 <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 绑定(bind)(我需要 PyQT + MySQL)。如果建议的解决方案会阻止我这样做,请告诉我。

最佳答案

好吧,我又要解决我自己的问题了,所以让我们把它变得有趣吧!

这是你最后的机会。

此后,没有回头路了。

您下载PyQT.exe ,故事结束。你在床上醒来,你相信你想相信的一切。你修改 .pro 文件,你就留在了仙境。而且,我会告诉你兔子洞有多深。

我最终放弃并下载了 .exe,它开箱即用地支持 MySQL。如果 mysql 不工作,则说明您的应用程序有问题,我建议您在此处阅读这篇文章 (http://lists.trolltech.com/qt-interest/2006-06/thread00292-0.html) 或遵循以下引用:

The issue is that you either have to use the addLibraryPath method or
create a QCoreApplication instance before your first call to loading a database

相信我,在 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-on-MinGW-:-problem-at-%22make-install%22-td28909249.html#(简短版本:问题出在您的其他 linux 编译器(如 cygwin 或 msys)中的 sh.exe,临时更改名称以强制 make install 使用 DOS 路径命名):

如果你配置 PyQT 并且它吐出一个与 QTCore 有关的文件错误

Google 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

关于mysql - Win7 MInGW QT MySQL 程序尖叫 "cannot find -lqsqlmysqld";失踪的图书馆在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3494875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com