解決 mysql 的 Qt 驅動問題
這個問題困擾了我一些時間, 因為 Qt 安裝完後, 沒有帶 mySQL 的驅動, 寫好的程式運行會提示說 “Driver not loaded”。不過還好, 在 src 目錄下可以找到 mysql qt 驅動的原始碼。 後來我用 Qt assistant 上說的方法, 但始終無法產生庫檔案, 總有連結錯誤。 後來google 一下,在 qtcn 上看到他們站長發的一篇文章,才知道是 mysql 預設帶的庫檔案是 ms 格式的, 所以使用 make 的話,ld 程式連結時會失敗。 如果大家使用linux系統,
那麼就只需按 assistant 說的就夠了, 下面 XChinux 也提到了。
解決的辦法他也給出了。轉錄如下:
以下引用引自:http://www.qtcn.org/bbs/read.php?tid=4210&fpage=&toread=&page=1
作者:XChinux
QUOTE:Qt4 OpenSource for mingw中編譯MySQL驅動
mingw-utils包下載:http://www.qtcn.org/download/mingw-utils-0.3.tar.gz
在Qt4的文檔中在Windows下關於怎樣編譯mysql的驅動上面說
CODE:[Copy to clipboard]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.
這就是一個容易搞混的地方,上面是使用的libmysql.lib和nmake來編譯的,如果使用的是msvc的編譯器,那上面是沒問題的,但是如果使用的是mingw編譯器,那就會出錯,有undefined reference....等類錯誤字樣。這是因為mingw使用的庫和msvc使用的不同格式的庫而引起的。而mysql只提供了msvc可使用的庫。 qt4 for mingw要想編譯出qsqlmysql庫來,我們先得編譯出mingw需要的libmysql.a這個檔案來,可使用mingw工具來產生。
mingw -utils包裡的reimp命令(如果沒有這個命令的話,可從本帖開頭處給出的地址中下載這個檔案,並把它解壓開後的bin目錄裡的內容拷貝到 mingw的bin目錄下面。mysql安裝的時候預設的安裝路徑中有空格,我們得先把它的include和lib目錄拷貝到沒有空格的路徑下,比如C: \mysql下)
CODE:[Copy to clipboard]cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a
如此,這樣我們的命令列為(注意qmake和make):
CODE:[Copy to clipboard] cd %QTDIR%\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro
如果出現這個,不要緊(保留反斜線字元不提倡使用),繼續執行mingw32-make
這下便會在%QTDIR%\plugins\mysql\debug目錄下面產生libmysql.a, mysql.dll這兩個檔案了。
有一點, 就是下載他給出的mingw-utils-0.3.tar.gz 檔案, 只需要把裡面的 reimp 工具複製到你的 minGW目錄下的bin 裡就可以了,這樣按上面的步驟就可以產生需要的驅動了。 make 結束後, 庫檔案會產生到qt的系統目錄中去。
然後使用mingw32-make release 產生release目錄下的檔案