cygwin下用mysql c api连接数据库详解
一、典型错误:
错误1:
命令:
gcc -I /usr/include/mysql/ -L /lib/ -lmysqlclient main.c
错误:
/tmp/ccT0KqUQ.o:main.c:(.text+0x2a): undefined reference to `mysql_init'
/tmp/ccT0KqUQ.o:main.c:(.text+0x2a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `mysql_init'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccT0KqUQ.o: bad reloc address 0x0 in section `.pdata'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: final link failed: Invalid operation
collect2: error: ld returned 1 exit status
分析:
娘哎,我怎么会知道-I,-L,-l这些选项要放最后面呢???修改如下:
gcc main.c -I /usr/include/mysql/ -L /lib/ -lmysqlclient
错误2:
命令:
gcc main.c -I /usr/include/mysql/ -L /lib/ -lmysqlclient
错误:
collect2: error: ld terminated with signal 11 [Segmentation fault], core dumped
分析:
估计你是自己从mysql.com下载的connector。抱歉,你得用cygwin提供的。方法如下:
1.打开cygwin的setup.exe,一路next,直到到达"select packages"页
2.搜索libmysql
3.打开Database Default节点,选择"libmysqlclient-devel","libmysqlclient18"。
4.安装
二、具体流程
1./root/src/test/main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mysql.h" void halt(MYSQL*, const char*); int main(int argc, char*argv[]) { MYSQL mysql; //初始化mysql
if(!mysql_init(&mysql))
{
halt(&mysql, "Mysql init failed");
} //连接
if(!mysql_real_connect(&mysql, "127.0.0.1", "root", "123456", "test", 3306, "", 0))
{
halt(&mysql, "Can't connect to mysql server");
} //设置字符集
if(0 != mysql_set_character_set(&mysql, "utf8")) {
halt(&mysql, "Can't set character");
} //查询test数据库的所有表
const char* sql = "SHOW TABLES";
if(0 != mysql_real_query(&mysql, sql, strlen(sql))) {
char message[200];
sprintf(message, "Query Error:%s", sql);
halt(&mysql, message);
} //获得结果集
MYSQL_RES* res = NULL;
if(!(res = mysql_use_result(&mysql))) {
halt(&mysql, "Can't fetch result");
} //输出结果
MYSQL_ROW row;
while(row = mysql_fetch_row(res)) {
printf("table:%s\n", row[0]);
} //释放资源
mysql_free_result(res); //关闭连接
mysql_close(&mysql); return 0;
} void halt(MYSQL* mysql, const char* message) {
fprintf(stderr, "message: %s\nerrno:%d\nerror:%s", message, mysql_errno(mysql), mysql_error(mysql));
exit(-1);
}
2.编译&链接
gcc main.c -I /usr/include/mysql/ -L /lib/ -lmysqlclient
3.运行
cygwin下用mysql c api连接数据库详解的更多相关文章
- Windows 7下如何在Cygwin下正确安装Tcpreplay(图文详解)
可以在大家安装的Cygwin的安装目录下执行(我的这里是D:\SoftWare\cygwin) #winpcap的安装过程:|$ unzip WpdPack_4_1_2.zip|$ cp -r Wpd ...
- PHP mysql与mysqli事务详解
官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...
- MySQL权限授权认证详解
MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...
- MySQL 语句执行过程详解
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- mysql配置文件my.cnf详解
原文地址:mysql配置文件my.cnf详解 作者:gron basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的 ...
- MySQL 执行计划explain详解
MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...
- mysql学习3:mysql之my.cnf详解
mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...
- mysql触发器trigger 实例详解
mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html) MySQL好像从5.0.2版本就开始支持触发器的功能 ...
- MySQL复制相关参数详解
MySQL复制相关参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...
随机推荐
- iOS:Swift界面实例1, 简单界面
Apple推出了基于Objective-C的新语言Swift. 通过实例, 我们可以很好的感受这门新语言 注意事项: 在XCode6_Beta中, 如果有中文, IDE的自动补全功能就会失效, 所以开 ...
- Vim识别编码
http://blog.chinaunix.net/uid-20357359-id-1963123.html
- php的ob实现页面静态化
php页面静态化的原理,用最少的代码解释页面静态化 如何应用:在插入或更新数据到数据库时,就执行一下代码是一种比较好的方法.比如:php执行add()方法时(就是插入数据时) //开启缓存 Ob_st ...
- mac下设置命令别名
项目使用了gerrit,每次push代码都需要执行 git push origin HEAD:refs/for/master 为了简便,使用了alias命令来控制台下使用下面的命令简化了提交. ali ...
- cloudera安装hadoop集群和相关服务
一.软件准备: 1.下载cloudera-manager-installer.bin(安装...-server),cdh4.cm(这是...-agent),另外还有些需要的关联软件下步添加. 2.先建 ...
- nbtstat Linux版源码, 通过IP获取主机名
nbtstat Linux版, 通过IP获取主机名/* NETBIOS name lookup tool - by eSDee of Netric (www.netric.org) * yeh.. i ...
- Linux Shell编程(20)——基本命令
新手必须要掌握的初级命令ls基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, 另一个很有用的选项 ...
- Linux Shell编程(18)—— 循环控制
影响循环行为的命令break, continuebreak和continue这两个循环控制命令[1]与其它语言的类似命令的行为是相同的. break命令将会跳出循环,continue命令将会跳过本次循 ...
- 转 ---- Asp.net mvc项目分页功能
1.定义一个分页用的Page<T>类 1 /* 使用示例: 2 var pager = new Pager<Article>( 3 this.ControllerContext ...
- jquery-pager分页
首先引用这三个文件 <script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript&qu ...