今天碰巧要用到mysql進行開發,在windows的mingw平台。
0.下載下傳mysql
http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-noinstall-5.1.73-win32.zip
下載下傳這個綠色版的。然後解壓到D盤下,複制一份ini配置檔案,修改部分選項,并啟動服務,詳細看我以前的部落格
http://www.cnblogs.com/wunaozai/p/3641589.html
1.開發安裝完了之後就進行開發,下面這個是一個示例程式
1 #include <stdio.h>
2 #include <windows.h>
3 #include <mysql.h>
4 #include <winsock2.h>
5
6 int main(int argc,char *argv[])
7 {
8 MYSQL conn;
9 int res;
10 mysql_init(&conn);
11 if(mysql_real_connect(&conn,"localhost","root","","test",0,NULL,CLIENT_FOUND_ROWS)) //"root":資料庫管理者 "":root密碼 "test":資料庫的名字
12 {
13 printf("connect success!\n");
14 res=mysql_query(&conn,"insert into test values('user','123456')");
15 if(res)
16 {
17 printf("error\n");
18 }
19 else
20 {
21 printf("OK\n");
22 }
23 mysql_close(&conn);
24 }
25 return 0;
26 }
要把mysql安裝程式中的include複制到開發環境中。然後還有構造一個libmysql.a這種靜态連結庫。
官方mysql的win發行版是由vc編譯,産生的lib無法被mingw連結。連結時會抛出未定義錯。
具體的辦法如下 在include檔案夾中複制 libmysql.def 到 lib目錄,在lib目錄執行下面這句
dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmysql.a -k (dlltool 工具是mingw自帶)
此時會生成一個libmysql.a檔案。然後把這個檔案複制到開發環境中,就基本是可以了。
我們弄好了這些後就編譯一下,
g++ main.cpp -o main.exe -Iinclude -L. -lws2_32 -lmysql
居然會出現這種錯誤
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0x68): undefined reference to `mysql_init@4'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0xb1): undefined reference to `mysql_real_connect@32'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0xdf): undefined reference to `mysql_query@8'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0x11d): undefined reference to `mysql_close@4'
collect2.exe: error: ld returned 1 exit status
make: *** [main] Error 1
解決如下
打開libmysql.def修改對應出錯的地方如
就像這樣,在後面手動增加數字,然後重複上面的操作,重新用dlltool生成一次libmysql.a連結庫
到這裡就可以用了。
參考資料
http://www.cnblogs.com/cy163/archive/2009/10/03/1577812.html
作者:無腦仔的小明 出處:http://www.cnblogs.com/wunaozai/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。 如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。有需要溝通的,可以站内私信,文章留言,或者關注“無腦仔的小明”公衆号私信我。一定盡力回答。 |