Eclipse + CDT + MinGW + MySQL环境搭建解决方案
环境说明: Windows XP, Eclipse 3.5, MinGW 5.1.4, Mysql 5.1.36, CDT 3.1
在Eclipse下用CDT和MinGW编写C访问Mysql时会出现 undefined reference to `mysql_init@4′的问题,这是因为mingw编译时找不到静态库的原因,网上的解决办法一般是用:reimp.exe及dlltool.exe重新生成libmysql.def和libmysql.a,然后用libmysql.a。具体命令是:
奇怪的是用这这个办法生成的libmysql.a为0字节,后来查看有libmysql.lib文件,试着将其改名为libmysql.a,问题得到解决,具体解决步骤如下:
1、添加Mysql头文件:
方法1:项目->属性->C/C++ Build->Tool Settings->GCC C Compiler->Directories 中添加你的头文件所在目录,包括Mysql中的include目录。
方法2:将Mysql中的include目录拷到项目下的头文件目录下或MinGW的公共include目录下,目录改名为mysql。
2、添加用于gcc编译的mysql静态库文件
复制mysql安装目录中的\lib\opt\libmysql.lib为libmysql.a。
另外查询或插入记录时乱码问题的解决:
在mysql连接成功后,发出查询之前,加入如下代码
- mysql_set_character_set(&mysql,"gb2312");
如有问题,请发邮件到 cdkey51@linuxany.com ,大家一起探讨。
注意:#include winsock.h与#include mysql.h的顺序,如果顺序相反或者未把winsock.h包含进来会出现error: syntax error before “SOCKET”的错误,导入winsock.h和windows.h二者之一便可以解决该问题。
- #ifndef MAIN_H_
- #define MAIN_H_
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <windows.h>
- //#include <winsock.h>
- #include <include/mysql.h>
- #endif /*MAIN_H_*/
- int main()
- {
- MYSQL mysql;
- MYSQL_RES *result;
- MYSQL_ROW row;
- mysql_init(&mysql); // 初始化mysql结构
- if (!mysql_real_connect(&mysql, "localhost", "username", "password", "linuxany", 3306, NULL, 0))
- {
- printf("\n数据库连接发生错误!");
- }
- else
- {
- printf("\n数据库连接成功!\n");
- if (mysql_query(&mysql, "select id, name from linuxanyuser"))
- {
- printf("\n数据库查询发生错误");
- }
- else
- {
- mysql_query(&mysql, "select id, name from linuxanyuser");
- printf("\n开始查询...");
- result = mysql_store_result(&mysql); // 获得结果集
- if (mysql_num_rows(result) != NULL)
- {
- int numRows = mysql_num_rows(result); // 获得结果集中的记录数
- int numFields = mysql_num_fields(result); // 获得表中字段数
- printf("\n共 %d 行记录,每行 %d 个字段。", numRows, numFields);
- while (row = mysql_fetch_row(result))
- {
- int i = 0;
- printf("\n 第 %d 行:", i);
- for (i = 0; i < numFields; i++)
- {
- fprintf(stdout, " %s", row[i]); // 打印字段值
- }
- }
- }
- else
- {
- printf("\n无查询结果!");
- }
- mysql_free_result(result); // 释放结果集
- }
- }
- mysql_close(&mysql); // 释放数据库连接
- return 0;
- }
没有评论▼