今天试了下用C语言连接数据库,因为是第一次操作,所以也有诸多不懂的地方,在网上查找了诸多资料,终于成功连接了,所以在这里分享给大家,因为笔者也是第一次使用,所以本文讲的并不是很深入,望各位谅解。

   由于编译运行环境是MinGW GCC,一开始写了一个简单的程序连接MySQL数据库的时候,遇到了一堆错误:

undefined reference to `mysql_init@4'
undefined reference to `mysql_real_connect@32'
undefined reference to `mysql_close@4'

显然是缺少库文件,在连接的时候找不到符号,确定不了地址,所以会出现undefined reference to 'xxx'的错误。

上网查了一下发现是少了一个  “libmsql.a”的静态连接库。需要我们自己编译下 C:\Program Files\MySQL\MySQL Server 5.6\lib 下的 libmysql.lib 文件

先下载一下MinGW工具包,下载地址是http://prdownloads.sourceforge.net/mingw/mingw-utils-0.2.tar.gz?download

解压后,将bin目录添加到系统的Path环境变量里面,

在C:\Program Files\MySQL\MySQL Server 5.6\lib 运行命令行,运行

reimp -d libmysql.lib

会得到一个 libmysql.def 的文件,然后在再执行下面这条命令

dlltool -k -d libmysql.def -l libmysql.a 

就会生成我们需要的静态库文件。将这个文件添加到Dev-CPP的安装目录下的lib文件夹里面,

同时将C:\Program Files\MySQL\MySQL Server 5.6\lib\libmysql.dll 这个文件放到C:\Windows\Systm32(32位)或者C:\Windows\SysWOW64 (64位)就可以了。


在MySQL的开发包目录下(与include和lib同级)新建一个test.cpp 的文件,测试的源码如下

#include <stdio.h>  
#include <winsock2.h>  
#include "mysql.h"  
int main()  
{  
    MYSQL mysql;  
    mysql_init(&mysql);  
    if(!mysql_real_connect(&mysql, "localhost", "root", "password", "db", 3306, NULL, 0))  
    {  
        printf("\nconnect error!");  
    }  
    else  
    {  
        printf("\nconnect success!\n");  
    }  
    mysql_close(&mysql);  
    return 0;  
}  

在Dev-CPP的任务栏的工具--编译选项--编译器--在连接器命令行加入以下命令-- -lmysql。

即编译运行成功!

文中若有何问题,敬请各位不吝指正!




GitHub 加速计划 / de / Dev-Cpp
2.48 K
269
下载
A fast, portable, simple, and free C/C++ IDE
最近提交(Master分支:3 个月前 )
882c2376 Update language files 4 个月前
0c248ea0 Lang=Japanese (日本語) // Please see issue Embarcadero#297 Same number of items as English.lng. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐