歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在CentOS裡使用MySQL C API

在CentOS裡使用MySQL C API

日期:2017/2/28 14:53:57   编辑:Linux教程

操作系統:CentOS6 (32或64位)

真的是很困難,對於一個一直在windows下開發的程序員來說,在linux下想解決點問題,還真的要付出很多呀!為了在CentOS裡使用MySQL C API ,這幾天一直在不斷努力,蒼天不負有心人,終於能夠在CentOS裡使用MySQL C API 了!!!

昨天折騰到下半夜1點多,終於從另外一個方向搞定了,是安裝新版的MySQL;今天經過努力,在CentOS默認安裝環境裡,使用上系統默認安裝的MySQL,也成功配置並使用上了MySQL C API。我想我遇到的問題,可能很多朋友會遇到,尤其是剛剛進入Linux的朋友,不敢獨享,在此寫出完整處理過程,以便各位朋友能夠少走彎路,更快使用上MySQL C API !!

好了,下面就開始說說我怎麼處理的吧,我們是使用CentOS默認安裝環境裡的MySQL,並不是安裝新版MySQL。建議大家用root帳號登入,這樣修改一些東西比較方便。

1,啟動MySQL。要使用MySQL C API ,第一件事就是確認是否有MySQL和MySQL C API ,CentOS剛安裝完畢時候,如果沒有做任何修改,那麼你的系統中已經安裝了MySQL,版本為5.1.61。這時MySQL並沒有啟動,我們需要在“系統”->“管理”->“服務”中找到“mysqld”,隨後啟動它,確認啟動完畢後,在終端中輸入“mysql”就會出現MySQL的提示信息了。

2,獲得MySQL C API 的頭文件和庫。我們在終端中輸入“whereis mysql”,大家會發現並沒有一個叫“/usr/include/mysql”的目錄,這個目錄一般是開發MySQL程序的頭文件的存放目錄。沒有不要緊,我們去mysql官方網站(http://www.mysql.com/),找到“MySQL Connectors”,隨後選擇“Connector/C”,進入這個鏈接頁面後,選擇自己的操作系統和版本,我們現在用32位系統,所以選擇了32位的linux版本,是一個tar文件,具體下載鏈接:http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit.tar.gz ,點擊下載完畢後,我們繼續下一步。

3,把MySQL C API 的頭文件和庫放到合適地方。首先解壓縮我們剛才下載的tar文件,解壓縮後,裡面有目錄和文件,我們只需要兩個目錄裡的文件:“include”和"lib"。

A,首先創建"/usr/include/mysql",把解壓縮目錄中的"include"目錄中所有文件,拷貝到"/usr/include/mysql"目錄中。

B,把解壓縮目錄中的"lib"目錄中所有文件,拷貝到“/usr/lib/mysql/”中。

“/usr/include/mysql”目錄存放文件是我們程序中要用到的頭文件;“/usr/lib/mysql/”目錄中存放文件是我們編譯程序時候需要鏈接的庫文件。

4,在MySQL中創建測試用的表。表名稱“ndb_test”。啟動終端,在終端中執行下列命令:

mysql -u root

use test;

create table ndb_test (user varchar(30),password varchar(30));

執行完上述語句後,我們就在MySQL中建立了一個叫“ndb_test”的表了。

5,准備測試程序。我們創建一個叫“mysql.c”的文件,在這個文件中寫上下列代碼:

#include <mysql.h>

#include <stdio.h>

int main(void) {

MYSQL *conn;

MYSQL_RES *res;

MYSQL_ROW row;

/* db configure*/

char *server = "localhost";

char *user = "root";

char *password = "";

char *database = "test";

int port=3314;

conn = mysql_init(NULL);

/* Connect to database */

if (!mysql_real_connect(conn, server,

user, password, database, port, NULL, 0)) {

fprintf(stderr, "connect error: %s\n", mysql_error(conn));

exit(0);

}

/* send SQL query */

if (mysql_query(conn, "select * from ndb_test")) {

fprintf(stderr, "%s\n", mysql_error(conn));

exit(0);

}

res = mysql_use_result(conn);

/* output table name */

printf("MySQL Tables in mysql database:\n");

while ((row = mysql_fetch_row(res)) != NULL)

printf("%s - %s \n", row[0],row[1]);

/* close connection */

mysql_free_result(res);

mysql_close(conn);

return 0;

}

6,用GCC編譯程序。在終端中進入“mysql.c”文件所在目錄,隨後輸入:"gcc -o mydbcon -I /usr/include/mysql/ -L /usr/lib/mysql -lmysqlclient mysql.c",如果上述操作無誤,我們應該已經編譯出來一個叫"mydbcon"的可執行文件了。

7,用"mydbcon"可執行文件驗證是否可以使用MySQL C API 了。在終端中鍵入"mydbcon"可執行文件所在目錄,輸入:“./mydbcon”,如果現在一切OK,那麼我們會看到無錯誤的提示。很可能出現錯誤,^_^

錯誤提示:“error while loading shared libraries: libmysql.so.16 ”。

解決辦法:找到“/etc/ld.so.conf”文件,打開它,在文件中添加一行:“/usr/lib/mysql”。輸入這行是mysql庫文件目錄路徑,我們把mysql庫文件放到了“/usr/lib/mysql”中, 所以 在這裡添加這行內容是“/usr/lib/mysql”,如果你放到其它目錄中,請用你正確的存放MySQL庫路徑名。

隨後繼續執行可執行文件“mydbcon”,還可能會出現錯誤。

錯誤提示:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

解決辦法:

1,打開“/etc/my.cnf”文件,在末尾添加:

[mysql]
socket=/var/lib/mysql/mysql.sock”

2,在終端中輸入:"ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock"

隨後繼續執行可執行文件“mydbcon”,這個時候我們應該能夠看到沒有錯誤的提示了,和源代碼中比較,如果一致,我們的配置就算成功了,現在就可以在GCC中編譯用MySQL C API編寫的程序了。

8,在Eclipse CDT中使用MySQL C API。在Eclipse的CDT中創建一個C工程,在工程中新建一個C文件,代碼和上面一樣。隨後就是需要設置一下,打開工程的屬性,在屬性窗體左側點“C/C++ Build”->"settings",隨後在右側的“tool settings”tab頁裡進行設置。

a,“GCC C Complier”->"inclues"->"include pathes(l)"中添加一項“/usr/include/mysql”。注意,這個地方是上面那個,不是下面那個。

b,“GCC C Complier”->"Miscellaneous“->"Other flags"中增加“-std=c99”。

c,“GCC C Linker”->"libraries"->"libraries"中增加一項“mysqlclient”。

d,“GCC C Linker”->"libraries"->"librariy search path"中增加一項“/usr/lib/mysql”。

以上各項全部配置完畢後,保存退出配置頁面,隨後編譯,應該沒有錯誤,隨後運行編譯出來的可執行文件,和GCC編譯出來的執行結果一樣,我們終於可以在Eclipse CDT中使用MySQL C API了!!!

Copyright © Linux教程網 All Rights Reserved