> 数据库 > MySQL >

在CentOS里使用MySQL C API

操作系统: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了!

 

(责任编辑:IT)