解析Qt 4.7.3編譯MYsql驅(qū)動(dòng)
本文講解Qt 4.7.3編譯MYsql驅(qū)動(dòng)的內(nèi)容,Qt 4.7.3在連接MYsql數(shù)據(jù)庫的時(shí)候可能出現(xiàn)的問題,原來是其他由于權(quán)限的問題,只給出了部分?jǐn)?shù)據(jù)庫的驅(qū)動(dòng)(只有sqlite)其他的驅(qū)動(dòng)只給出了源文件還有文檔說明,需要自己編譯,那么本文將會(huì)幫你解決這些問題。
首先,這樣的教程在網(wǎng)上有很多,我選了一下比較好的貼出來網(wǎng)址,但是根據(jù)自己的情況不同可能會(huì)遇到很多問題。。。但是大同小異,基本上都可以解決:
http://blog.knowsky.com/201556.htm
http://blog.knowsky.com/201556.htm
http://no001.blog.51cto.com/1142339/300920
http://www.blogjava.net/nokiaguy/archive/2009/03/23/261502.html
http://www.blogjava.net/nokiaguy/archive/2009/03/23/261502.html
http://no001.blog.51cto.com/1142339/300920
http://www.blogjava.net/javabloger/archive/2008/07/14/214740.html
http://space.itpub.net/22893636/viewspace-663033
mingw-utils包下載:http://www.qtcn.org/download/mingw-utils-0.3.tar.gz
閑話少說:解決問題首先是要下載安裝MYsql還有QT,這個(gè)不用多說了,接觸過的都熟悉了,PS(以前下載的時(shí)候都是SDK集成的開發(fā)環(huán)境,但是,最近我下載的時(shí)候發(fā)現(xiàn)不一樣了,SDK把不需要的塞班也加進(jìn)去了,開發(fā)包很大1.5G,安裝需要9G的空間)沒辦法我只能下載的
- qt-creator-win-opensource-2.2.0
- qt-win-opensource-4.7.3-mingw
安裝的時(shí)候可能會(huì)遇到點(diǎn)錯(cuò)誤,上面給出的網(wǎng)址中有解決的遮掩問題的,哈哈,放心吧。然后就是MYsql,我安裝的是5.5,一個(gè)比較新的版本,下載網(wǎng)址是:
http://www.mysql.com
安裝的時(shí)候最好就一次安裝好,不然就悲劇了,這個(gè)很難被卸載。。。
然后就是編譯mysql驅(qū)動(dòng)了:打開Qt Command Prompt。你會(huì)發(fā)現(xiàn),你的環(huán)境變量他自己給你設(shè)定了,這樣的話,就需要在你的編譯驅(qū)動(dòng)之前就修改這些環(huán)境變量,不然的話會(huì)在編譯的時(shí)候遇到各種“不是命令或者內(nèi)部文件”的問題首先打開qt-win-opensource-4.7.3-mingw安裝目錄下面的bin目錄找到Qt Command Prompt的批處理文件,然后編輯他的環(huán)境變量的部分“PATH”記住有兩處需要修改,然后就是具體的操作了(派出了各種問題的隱患)
引用:
You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL): cd %QTDIR%\src\plugins\sqldrivers\mysql qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro nmake If you are not using a Microsoft compiler, replace nmake with make in the line above.
這就是一個(gè)容易搞混的地方,上面是使用的libmysql.lib和nmake來編譯的,如果使用的是msvc的編譯器,那上面是沒問題的,但是如果使用的是mingw編譯器,那就會(huì)出錯(cuò),有undefined reference....等類錯(cuò)誤字樣。這是因?yàn)閙ingw使用的庫和msvc使用的不同格式的庫而引起的。而mysql只提供了msvc可使用的庫。
qt4 for mingw要想編譯出qsqlmysql庫來,我們先得編譯出mingw需要的libmysql.a這個(gè)文件來,可使用mingw工具來生成。 mingw -utils包里的reimp命令(如果沒有這個(gè)命令的話,可從本帖開頭處給出的地址中下載這個(gè)文件,并把它解壓開后的bin目錄里的reimp內(nèi)容拷貝到 mingw的bin目錄下面。
mysql安裝的時(shí)候默認(rèn)的安裝路徑中有空格,我們得先把它的include和lib目錄拷貝到?jīng)]有空格的路徑下,比如C: \mysql下)
CODE: cd c:\mysql\lib\opt reimp -d libmysql.lib dlltool -k -d libmysql.def -l libmysql.a 這時(shí)候你會(huì)發(fā)現(xiàn)你的lib文件夾下面會(huì)多出兩文件: libmysql.a & libmysql.def (推薦使用mysql5.5,其他的貌似沒有l(wèi)ibmysql*.lib文件)
然后使用qmake和make命令:
cd %QTDIR%\src\plugins\sqldrivers\mysql qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro make 這下便會(huì)在%QTDIR%\plugins\sqldrivers目錄下面生成libqsqlmysql.a, qsqlmysql.dll這兩個(gè)文件了。
注意這里可能會(huì)遇到這種問題:
- WARNING: (internal):1: Unescaped backslashes are deprecated.
- WARNING: (internal):1: Unescaped backslashes are deprecated.
- WARNING: (internal):1: Unescaped backslashes are deprecated.
我也遇到了你的這個(gè)問題,我把我的解決方法給你,希望對(duì)你有用。
(1)dos下進(jìn)入:D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql>
(2)用記事本打開D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\ mysql.pro文件,在第二行加入: INCLUDEPATH += "C:\Program Files\MySQL\MySQL Server 5.1\include" LIBS += "C:\Program Files\MySQL\MySQL Server 5.1\lib\opt\libmysql.lib" 并保存
(3)在dos下輸入:
qmake -o Makefile mysql.pro 此時(shí)可能也會(huì)提示:
- WARNING:
- d:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: Unescaped ba ckslashes are deprecated. WARNING:
- d:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: Unescaped ba ckslashes are deprecated. WARNING:
- d:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: Unescaped ba ckslashes are deprecated
但是好像對(duì)最后的結(jié)果沒有影響
然后使用make命令;
但是這時(shí)候只有在debug文件夾有兩個(gè)文件
然后使用make release 生成release目錄下的文件
- qsqlmysql4.dll
- libqsqlmysql4.a
- qsqlmysqld4.dll
- libqsqlmysqld4.a
這時(shí)候把這幾個(gè)文件拷貝到 C:\Qt\……\plugins\sqldrivers下面;另外,根據(jù)文檔所說的,還要把libmysql.dll復(fù)制到system32目錄。
小結(jié):關(guān)于Qt 4.7.3編譯MYsql驅(qū)動(dòng)的內(nèi)容將講到這里,希望能夠幫助到你!
【編輯推薦】