- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在使用 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/
我是 C 语言新手,我编写了这个 C 程序,让用户输入一年中的某一天,作为返回,程序将输出月份以及该月的哪一天。该程序运行良好,但我现在想简化该程序。我知道我需要一个循环,但我不知道如何去做。这是程序
我一直在努力找出我的代码有什么问题。这个想法是创建一个小的画图程序,并有红色、绿色、蓝色和清除按钮。我有我能想到的一切让它工作,但无法弄清楚代码有什么问题。程序打开,然后立即关闭。 import ja
我想安装screen,但是接下来我应该做什么? $ brew search screen imgur-screenshot screen
我有一个在服务器端工作的 UDP 套接字应用程序。为了测试服务器端,我编写了一个简单的 python 客户端程序,它发送消息“hello world how are you”。服务器随后应接收消息,将
我有一个 shell 脚本,它运行一个 Python 程序来预处理一些数据,然后运行一个 R 程序来执行一些长时间运行的任务。我正在学习使用 Docker 并且我一直在运行 FROM r-base:l
在 Linux 中。我有一个 c 程序,它读取一个 2048 字节的文本文件作为输入。我想从 Python 脚本启动 c 程序。我希望 Python 脚本将文本字符串作为参数传递给 c 程序,而不是将
对于一个类,我被要求编写一个 VHDL 程序,该程序接受两个整数输入 A 和 B,并用 A+B 替换 A,用 A-B 替换 B。我编写了以下程序和测试平台。它完成了实现和行为语法检查,但它不会模拟。尽
module Algorithm where import System.Random import Data.Maybe import Data.List type Atom = String ty
我想找到两个以上数字的最小公倍数 求给定N个数的最小公倍数的C++程序 最佳答案 int lcm(int a, int b) { return (a/gcd(a,b))*b; } 对于gcd,请查看
这个程序有错误。谁能解决这个问题? Error is :TempRecord already defines a member called 'this' with the same paramete
当我运行下面的程序时,我在 str1 和 str2 中得到了垃圾值。所以 #include #include #include using namespace std; int main() {
这是我的作业: 一对刚出生的兔子(一公一母)被放在田里。兔子在一个月大时可以交配,因此在第二个月的月底,每对兔子都会生出两对新兔子,然后死去。 注:在第0个月,有0对兔子。第 1 个月,有 1 对兔子
我编写了一个程序,通过对字母使用 switch 命令将十进制字符串转换为十六进制,但是如果我使用 char,该程序无法正常工作!没有 switch 我无法处理 9 以上的数字。我希望你能理解我,因为我
我是 C++ 新手(虽然我有一些 C 语言经验)和 MySQL,我正在尝试制作一个从 MySQL 读取数据库的程序,我一直在关注这个 tutorial但当我尝试“构建”解决方案时出现错误。 (我正在使
仍然是一个初学者,只是尝试使用 swift 中的一些基本函数。 有人能告诉我这段代码有什么问题吗? import UIKit var guessInt: Int var randomNum = arc
我正在用 C++11 编写一个函数,它采用 constant1 + constant2 形式的表达式并将它们折叠起来。 constant1 和 constant2 存储在 std::string 中,
我用 C++ 编写了这段代码,使用运算符重载对 2 个矩阵进行加法和乘法运算。当我执行代码时,它会在第 57 行和第 59 行产生错误,非法结构操作(两行都出现相同的错误)。请解释我的错误。提前致谢:
我是 C++ 的初学者,我想编写一个简单的程序来交换字符串中的两个字符。 例如;我们输入这个字符串:“EXAMPLE”,我们给它交换这两个字符:“E”和“A”,输出应该类似于“AXEMPLA”。 我在
我需要以下代码的帮助: 声明 3 个 double 类型变量,每个代表三角形的三个边中的一个。 提示用户为第一面输入一个值,然后 将用户的输入设置为您创建的代表三角形第一条边的变量。 将最后 2 个步
我是新来的,如果问题不好请见谅 任务:将给定矩阵旋转180度 输入: 1 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输出: 16 15 14 13 12 11
我是一名优秀的程序员,十分优秀!