為 DEV-C++ 產生 libmysql.a 的過程 及 windows下 devc++ c語言訪問mysql資料庫 環境配置
來源:互聯網
上載者:User
本文內容包括兩部分:一。 為 DEV-C++ 產生 libmysql.a 的過程二。windows下 devc++ c語言訪問mysql資料庫 環境配置一。為 DEV-C++ 產生 libmysql.a 的過程目的:因為DEV-C++ 使用的編譯器是gcc, 而 MySQL內建的libmysql.dll 只支援Visual Stdio。為此,需要從libmysql.dll 產生libmysql.a。使用的命令是:Dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmySQL.a -k為使上一命令正確執行,需要注意以下幾點:(1) dlltoll.exe 存在於 DEV-C++ 目錄下(C:\Program Files\DEV-CPP\mingw32\bin);而 libmySQL.def 和 libmySQL.dll 存在於 MySQL目錄下。首先需要把libmySQL.def 和 libmySQL.dll 拷貝到dlltoll.exe 所在的目錄。而不是相反,把dlltoll.exe 拷貝 到MySQL目錄下libmySQL.dll所在的目錄。這是 因為libmySQL.dll 的全路徑上,有 “MySQL server 5.1”,中間有空格,這會影響 dlltool 命令的執行,產生錯誤資訊 考慮到 dlltoll.exe 存在於 C:\Program Files\DEV-CPP\mingw32\bin中,因此可以把 libmySQL.dll 拷貝到此目錄“…….installation problem Cannot exec ‘as’”(2) 上一命令中的libmySQL.def 不是,MySQL安裝後即存在的那個檔案。而是必須使用下面的命令,基於libmysql.lib 產生。 Reimp -d libmysql.lib (似乎reimp 並不包含在DEV-C的安裝包中,需要另外下載)可以通過比較新產生的 libmySQL.def 和 在另一目錄下的 MySQL 內建的同名檔案的大小,發現兩者是不同的。若錯誤地使用MySQL 內建的libmySQL.def檔案,執行dlltool命令時會出現一系列類似下面的錯誤資訊。undefined reference to `mysql_real_query@12' Reimp包含在 mingw-utils中,因此需要下載 mingw-utils。註:如果在DEV-C中的 Project ---Project Option --- Parameters Linker 中不指定 libmySQL.a 的全路徑,也會出現類似undefined reference to `mysql_init@4' 這樣的錯誤。(3) 產生libmySQL.a 後,還需要在DEV-C++的 ‘Project Option’ | Compiler Options | Linker Sheet 在linker 一欄添上libmySQL.a 的全路徑(含檔案名稱)。二. windows下 devc++ c語言訪問mysql資料庫 環境配置參考了以下兩篇文章(1) http://hi.baidu.com/leeyou1450/blog/item/78fdd438ec9986f63a87ceaa.html(2) http://hi.baidu.com/leeyou1450/blog/item/ede27dd8f488bdec39012fa9.html但是雖然自己也是用的 DEV-C 4.9.9.2版,WindowsXP系統,按照這兩篇文章的指示設定卻不成功,對其進行了一些改進。具體情況如下。a) 要想在程式中使用mysql資料庫,需要在 Project |‘Project Option’ | Compiler Options | Linker Sheet 在linker 一欄添上libmySQL.a 的全路徑b) 想在程式中使用多線程,需要在 Project | Project Option’ | Compiler Options | Linker Sheet 在linker 一欄添上 C:\Program Files\DEV-CPP\Lib\libws2_32.a (據網上文章說 同目錄下的檔案 libwsock32.a 是舊版,因此應用libws2_32.a)c) 有網文推薦 在 Project |‘Project Option’ | Compiler Options |的 Copliler 和 C++ Compiler 框中添加 -Wall 和-Wd) 在 Project |‘Project Option’ | Directories | Include Directories 下添加 C:\Program Files\MySQL\mysql-5.1.38-win32\include 這樣在 xxx.cpp檔案中才可以包含 #include "mysql.h"。 奇怪的是,在 Tools---Compiler Options---Directories --- C Includes 或 C++ Includes中包含 C:\Program Files\MySQL\mysql-5.1.38-win32\include 不起作用e) Tools---Compiler Options---Directories---Libraries 下添加 C:\Program Files\MySQL\mysql-5.1.38-win32\lib\opt可以用下面的代碼測試DEV-C的環境設定是否正確#include <cstdlib>#include <iostream>using namespace std;#include <windows.h>#include "mysql.h"#include <stdio.h>#include <stdlib.h>#include <winsock.h>/*int main(){ WSADATA wsadata; WSAStartup(0x101, (LPWSADATA)& wsadata); system("PAUSE"); return 0;}*/int main(){ MYSQL mysql; //mysql串連 MYSQL_RES *res; //這個結構代表返回行的一個查詢結果集 MYSQL_ROW row; //一個行資料的型別安全(type-safe)的表示 char *query; //查詢語句 int t,r; mysql_init(&mysql); if (!mysql_real_connect(&mysql,"localhost", "root", "", "mysql",3306,NULL,0)) { printf( "Error connecting to database%s\n",mysql_error(&mysql)); } else printf("Connected...\n"); query="SET CHARACTER SET GBK"; //設定編碼 t=mysql_real_query(&mysql,query,(unsigned int)strlen(query)); if(t) { printf("編碼設定失敗\n"); } query=" select * from user "; t=mysql_real_query(&mysql,query,(unsigned int)strlen(query)); if(t) { printf("執行查詢時出現異常: %s",mysql_error(&mysql)); }else printf("[%s] 構建成功 \n",query); res=mysql_store_result(&mysql); while(row=mysql_fetch_row(res)) { for(t=0;t <mysql_num_fields(res);t++) { printf("%s: ",row[t]); } printf("\n"); } mysql_free_result(res); //sleep(1); scanf("%d",&t); return 0;}