一、典型错误:

错误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连接数据库详解的更多相关文章

  1. Windows 7下如何在Cygwin下正确安装Tcpreplay(图文详解)

    可以在大家安装的Cygwin的安装目录下执行(我的这里是D:\SoftWare\cygwin) #winpcap的安装过程:|$ unzip WpdPack_4_1_2.zip|$ cp -r Wpd ...

  2. PHP mysql与mysqli事务详解

    官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...

  3. MySQL权限授权认证详解

    MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...

  4. MySQL 语句执行过程详解

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  5. mysql配置文件my.cnf详解

    原文地址:mysql配置文件my.cnf详解 作者:gron basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的 ...

  6. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

  7. mysql学习3:mysql之my.cnf详解

    mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...

  8. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  9. MySQL复制相关参数详解

    MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

随机推荐

  1. 【python】闰年规则

    公历闰年判定遵循的规律为: 四年一闰,百年不闰,四百年再闰. 公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)1.能被4整除而不能被100整除.2.能被400整除.

  2. python库tkinter、pygame中几点需要注意的问题

    恍然之间已经16年快四月份了,已经好久都没有写过东西了.. 最近在用python做一些小的游戏,在网上找了一些Python库,Python中游戏编程最常用的还是pygame了,其次是Tkinter p ...

  3. register 不允许 block 模式,而默认的是

    Exception in thread "main" java.nio.channels.IllegalBlockingModeException at java.nio.chan ...

  4. LightOj_1079 Just another Robbery

    题目链接 题意: 抢银行(这个背景最爱了), 有n家银行, 每家银行抢劫被抓的概率是p[i],你认为当你被抓的概率低于P的时候是安全的. 问, 你最多能抢劫到多少money. 思路: 抽象成背包问题, ...

  5. Jinja2学习笔记暨官方文档的翻译

    http://blog.csdn.net/lgg201/article/details/4647471 呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好.  ...

  6. March of the Penguins

    poj3498:http://poj.org/problem?id=3498 题意:某个冰块上有a只企鹅,总共可以跳出去b只,问是否可能所有的企鹅都跳到某一块冰块上,输出所有的可能的冰块的编号. 由于 ...

  7. Altium Designer 定义板子外框

    Altium Designer 提供多种定义板子外形的方法. 第一种方法,在Files 面板(在界面下面System菜单条中查找)中选择PCB Templates命令.在这个界面下您可以选择符合您设计 ...

  8. android——彻底关闭——应用程序

    最近学习做android的游戏开发时候,发现一个关于android退出时不能彻底关闭的问题,比如:一个程序里new 出了N多个Thread,这样在退出程序的可能不能完全关闭,最后发现,只用finish ...

  9. VC和VS调用Lua设置以及Lua C API使用。

    通过c++调用lua 脚本,    环境VC++6.0    lua  sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_ope ...

  10. HTML5 Canvas JavaScript库 Fabric.js 使用经验

    首先,表明我的态度:采用 Flash 才是最优方案,不建议使用 HTML 5 的 Canvas 做一些生产/工业级的网页应用. Flash的优势一是浏览器支持好,二是代码成熟稳定.而HTML5 的 C ...