我试图让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-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绑定我的代码(我需要的PyQt + MySQL的)。 如果所提出的解决方案将阻止我这样做,让我知道。