mingw 將windows lib.dll 轉成 lib.a 例子 (轉)


 原文 http://1029975378-qq-com.iteye.com/blog/1310910

 

 昨天是一場經過了如此糾結的MySQL數據庫的卸載再安裝的洗禮的一天,今天的在Windows下Qt驅動MySQL數據庫也是歷經千辛萬苦才到達成功的彼岸的。雖然遇到了各種亂七八糟的問題,不過總算是圓滿解決,這也是令人欣慰的一點吧。謹以此文紀念下我的艱難曲折。如果能為大家提供一些幫助,我將不勝榮幸。

      MySQL不能選擇Typical型,這樣會缺少庫文件。可以選擇Full型或Custom型。我安裝的MySQL是Typical型的,所以在lib目錄下是沒有opt文件夾的,因此進行了重新安裝(積累了N多經驗,這次安裝可算是小菜一碟)。為了圖方便,我直接選擇了Full型的,但這樣會存在一個問題,MySQL默認的安裝路徑是C:\Program Files\MySQL\MySQL Server 5.1,這個路徑中存在空格,這會在后面的操作中出現問題。我的解決方案是在C盤下直接新建一個mysql文件夾,將C:\Program Files\MySQL\MySQL Server 5.1\include 和C:\Program Files\MySQL\MySQL Server 5.1\lib目錄拷到C:\mysql文件夾下。

       安裝好MySQL后,進行Qt的安裝。將Qt下的bin和QT\qt\bin配置環境變量。

       Qt是集成了mingw的,看到網上說要下載MinGW,不管三七二十一,我也下載安裝了一下。將MinGW的bin配置環境變量。

       mingw使用的庫和msvc使用的不同格式的庫而引起的。而mysql只提供了msvc可使用的庫,所以需要下載一個動態庫格式轉換工具,網址為: http://www.qtcn.org/download/mingw-utils-0.3.tar.gz,解壓后把里邊bin目錄里的remip.exe拷到mingw的bin目錄。我是把reimp.exe同時也放到了MinGW的bin下(我也不知道有沒這必要,一來是首次接觸Qt這東東,二來也沒看到網上詳細的解釋)。

以下為本人機器上的命令行操作,路徑請修改為自己設置的:
過程:
1:從libmysql.lib生成libmysql.a文件(mingw使用的靜態鏈接文件為linux格式 *.a)
>>C:
>>cd mysql\lib\opt
>>reimp -d libmysql.lib (生成 libmysql.def文件)
>>dlltool -k -d libmysql.def -l libmysql.a (生成 libmysql.a文件)

2:生成Qt下的mysql驅動:
>>cd \
>>cd qt\src\plugins\sqldrivers\mysql
>>QMAKE -o Makefile "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\Llib\opt\libmysql.a" mysql.pro
>>mingw32-make

在這個時候,我遇到問題。在執行完QMAKE -o Makefile "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\Llib\opt\libmysql.a" mysql.pro
會出現警告。

 

WARNING: (internal):1: Unescaped backslashes are deprecated.   

WARNING: (internal):1: Unescaped backslashes are deprecated.   

WARNING: (internal):1: Unescaped backslashes are deprecated. 

 

      遇到該警告,也有看到網上有相應的解決方法,現在也把它放上來以供參考。但貌似這警告對后面的執行沒有影響。

用記事本打開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" 並保存.

      (其實我也比較困惑這個問題,我覺得應該是在第二行加入:INCLUDEPATH+="C:\mysql\include" LIBS+="C:\mysql\Llib\opt\libmysql.a" 這只是我的猜測,我也沒試過。呵呵~)

      在執行mingw32-make時,出現了一堆vc98的問題,在網上看了蠻多的博文,都沒有看到類似的問題,不過踏破鐵鞋無覓處得來全不費工夫,終於在某篇博文上看到了這個問題,博主也給出了解決方法。造成一堆亂78糟的vc98問題的原因是在裝vc98時自動的配置了環境變量include 和 lib ,先刪了這兩個環境變量,執行完mingw32-make命令后再重新配置回去就沒有問題了。

 

       成功執行后,會E:\QT\qt\plugins\sqldrivers下生成下面四個文件。

  1. qsqlmysql4.dll   
  2. libqsqlmysql4.a  
  3. qsqlmysqld4.dll   
  4. libqsqlmysqld4.a  

      這樣,終於,Qt可以驅動Mysql了。

      接下來寫下測試程序。

      頭文件引入:

#include <QSqlDatabase>

#include <QSqlError>

     

     測試代碼:

Cpp代碼   收藏代碼
  1. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  
  2. db.setHostName("localhost");  
  3. db.setDatabaseName("gamesql");  
  4. db.setUserName("root");  
  5. db.setPassword("netjava");  
  6. bool ok = db.open();  
  7. if(!ok){  
  8.     qDebug()<<"failuer";  
  9.     qDebug()<<db.lastError();  
  10. }else{  
  11.     qDebug()<<"success";  
  12. }  

 

 

注意,要在項目的pro文件下加入

QT +=sql

才可以。

 

QT += core gui QT +=sql TARGET = test TEMPLATE = app

 
        

 

好了,這樣一切OK啦~~

就一個簡單的配置驅動問題,弄了一天,整個人就屬於焦頭爛額的狀態,不過收獲還是有的嘛。在塵埃落定的那一刻,還是蠻開心的~~(*^__^*) ~~

 

驅動安裝問題小結一下:

1.MySQL的include和lib路徑中不能含有空格。

2.下載mingw-utils-0.3.tar.gz 將其解壓后的reimp.exe放到mingw下,執行生成libmysql.a文件

3.配置Qt環境變量。同時我也把WinGW也配置了環境變量(我不知道這是否必要)。

4.用qmake和make命令生成MySQL驅動。

4.警告解決,用記事本打開D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\ mysql.pro文件配置文件。

 

5.如果有vc98相關環境變量,將vc98的環境變量先刪了,裝好后再恢復。

 

希望能對大家有幫助~~

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM