【MySQL】C语言连接MySQL数据库1——环境配置

目录

 1.引入库

1.1.一键安装

1.2.手动下载库 

2.使用库

2.1.简单示例(一键安装的)

2.2.简单示例(手动下载的)


 1.引入库

要使用C语言连接MySQL,需要使用MySQL官网提供的库——libmysqlclient-dev

1.1.一键安装

如果我们使用的是Linux系统的话我们可以直接使用的命令安装MySQL给我们提供的官方库。

要在Ubuntu 22.04上安装MySQL的开发包(通常包含用于开发MySQL应用程序所需的头文件和库),你应该使用apt命令。

以下是在Ubuntu 22.04上安装MySQL开发包的步骤:

  • 更新软件包列表:

首先,确保你的软件包列表是最新的。打开终端并输入以下命令:

sudo apt-get update

  • 安装MySQL开发包:

接下来,使用apt命令安装MySQL的开发包。在Ubuntu上,通常的MySQL开发包是libmysqlclient-dev。输入以下命令进行安装:

sudo apt-get install libmysqlclient-dev

这个包包含了开发MySQL客户端应用程序所需的头文件和库。

执行过程会遇到下面这个情况,直接按enter即可

  • 验证安装:

安装完成后,下载完以后我们可以在/usr/include/mysql/(其他系统可能会有差别)看到头文件:

ls /usr/include/mysql/

可以看到有很多库文件啊!!

 如果没有安装成功,就会像下面这样子

此外我们找一下我们的安装的库 

sudo find /usr/lib -name 'libmysqlclient*.so*'

这几个是最主要的库文件 

 我们在上面这些路径里面也能看到对应的库: 这说明我安装成功了

没安装成功的情况如下:

如果不想用上面那个方式,我们可以使用下面这个方法

  • 验证安装(第二种方法)

安装完成后,你可以通过检查安装的包来验证是否成功安装了MySQL开发包。输入以下命令:

dpkg -L libmysqlclient-dev

dpkg -L libmysqlclient-dev 命令会列出 libmysqlclient-dev 包安装的所有文件。您可以在输出中查找与头文件相关的路径。 

如果没有安装成功,就会是下面这个样子

1.2.手动下载库 

首先,进入MySQL官网,选择DOWNLOADS(下载),然后点击MySQL Community (GPL) Downloads。如下:

接下来选择C API(libmysqlclient)

我们进去之后按下面这个点击

  

查看自己MySQL服务器的版本号

SELECT VERSION();

 

进来之后按下面这个填就好了 

 注意:MySQL版本低于8.0.40的请按这个

 

 进来之后发现怎么这么多啊?我该下载哪一个?

要在Ubuntu 22.04上使MySQL能够被C语言连接,你需要下载并安装libmysqlclient-dev库。这个库提供了MySQL的C API,使得C语言程序能够访问MySQL数据库。

根据提供的下载信息,你可以直接下载适用于Ubuntu 22.04的libmysqlclient-dev的DEB包,即:

  • 文件名: libmysqlclient-dev_8.0.40-1ubuntu22.04_amd64.deb

 

我们把它放到桌面去

 进入我们的ubuntu22.04的机器里面去,我们使用rz命令把这个文件上传到我们的系统里面

然后可以使用 dpkg-deb 命令,将 .deb 文件的内容解压到当前目录。

如下:

dpkg-deb -x libmysqlclient-dev_8.0.40-1ubuntu22.04_amd64.deb .

tree usr

 

这里面就是我们的库文件。

现在我们的库算是安装好了,具体怎么使用,我们下面再说

2.使用库

mysqlclient给我们提供了许多API,其官方手册中可以看到许多细节内容,此外还有一些关于mysqlclient库中一些结构体对象的含义可以看这里。

2.1.简单示例(一键安装的)

为了确保我们能够正常的将库引入进我们的代码中,我们可以先使用mysql_get_client_info()函数来进行测试。这个函数会返回 MySQL 客户端库的版本信息。以下是一个简单的示例,展示了如何在 C 语言中使用这个函数。

main.c

#include <mysql/mysql.h>  
#include <stdio.h>  
  
int main() {  
    // 调用 mysql_get_client_info 函数获取客户端库版本信息  
    const char *client_info = mysql_get_client_info();  
  
    // 打印客户端库版本信息  
    if (client_info) {  
        printf("MySQL client library version: %s\n", client_info);  
    } else {  
        printf("Failed to get MySQL client library version.\n");  
    }  
  
    // 注意:虽然这个示例没有实际连接到数据库,但调用 mysql_get_client_info 不需要连接  
    // 如果你需要进行数据库操作,需要初始化 MySQL 库并连接数据库,这超出了这个简单示例的范围  
  
    return 0;  
}

为了方便后续重复编译源文件,可以在项目目录下创建一个Makefile,Makefile当中的内容如下:

test:main.c
    gcc -o $@ $^ -std=c99 -L /usr/lib/x86_64-linux-gnu -lmysqlclient
.PHONY:clean
    rm -rf test

注意:

-L 和 -l 是 GCC(GNU Compiler Collection)编译器在链接阶段使用的两个选项,它们分别用于指定库文件的搜索路径和要链接的库。

-L 选项:

  • -L 选项后面跟着的是库文件的搜索路径。当你链接一个程序时,链接器需要找到程序所依赖的所有库文件。-L 选项就是用来告诉链接器在哪些目录下搜索这些库文件的。例如,如果你有一个库文件位于 /usr/local/lib 目录下,而链接器默认不在这个目录下搜索库文件,那么你就需要使用 -L/usr/local/lib 来指定这个搜索路径。

-l 选项:

  • -l 选项后面跟着的是要链接的库的名字(注意,这里不需要加前缀 lib 和文件后缀,如 .so 或 .a)。GCC 会自动在这个名字前加上 lib 前缀,并在系统默认的库路径或你通过 -L 选项指定的路径下搜索名为 lib<库名>.so(对于动态库)或 lib<库名>.a(对于静态库)的文件。例如,如果你想要链接数学库,你可以使用 -lm,GCC 就会去搜索名为 libm.so 或 libm.a 的文件。
  • 注意 -l 和库名之间不应该有空格

我的库安装在下面这个目录里面

 gcc -o $@ $^ -std=c99 -L /usr/lib/x86_64-linux-gnu -lmysqlclient 

这条命令的意思是:使用 GCC 编译器,将 $^(代表所有的依赖文件,这里应该是 main.c)编译并链接成一个名为 $@(代表目标文件,这里应该是 test)的可执行文件,使用 C99 标准,在 /usr/lib/x86_64-linux-gnu 目录下搜索库文件,并链接名为 mysqlclient 的库。

这里我们没有指定头文件的搜索路径,因为我们mysql头文件在/usr/inclue目录下,这是gcc编译时的默认搜索路径,所以我们不需要指定。

  查看自己MySQL服务器的版本号

SELECT VERSION();

 

我们发现完全对的上!!所以我们是成功了!!!!!

从运行结果我们能够看出我们使用的客户端库版本是5.744,此外我们还可以使用ldd命令查看程序运行所需要的库

我们发现我们成功连接上我们的库了!! 

2.2.简单示例(手动下载的)

我们换一台机器来,因为这个的测试不能在上面那个apt安装的环境下测试!!因为那个会影响到我们!!

如果说我们是按照我上面那样手动下载的,那么我们就来展示一下怎么使用那个吧!!!

main.c

#include <mysql/mysql.h>  
#include <stdio.h>  
  
int main() {  
    // 调用 mysql_get_client_info 函数获取客户端库版本信息  
    const char *client_info = mysql_get_client_info();  
  
    // 打印客户端库版本信息  
    if (client_info) {  
        printf("MySQL client library version: %s\n", client_info);  
    } else {  
        printf("Failed to get MySQL client library version.\n");  
    }  
  
    // 注意:虽然这个示例没有实际连接到数据库,但调用 mysql_get_client_info 不需要连接  
    // 如果你需要进行数据库操作,需要初始化 MySQL 库并连接数据库,这超出了这个简单示例的范围  
  
    return 0;  
}

首先我们要搞清楚我们安装的库和头文件在哪里

很好,我们的文件都是在/root/MYSQL/usr/里面 注意:

         GCC和G++编译器在编译C或C++程序时,可以通过-I (大写i)选项来指定头文件的路径。个选项告诉编译器在默认的搜索路径之外,还需要在哪些目录中查找头文件。

        例如,如果你的头文件位于/home/user/include目录下,你可以在编译命令中添加-I/home/user/include来指定这个路径。这样,编译器在编译程序时,就会在这个目录下查找你包含的头文件。

具体的使用方式如下:

gcc -I/home/user/include main.c -o main_program 

在这个例子中,-I/home/user/include就是告诉GCC编译器在/home/user/include目录下搜索头文件,然后编译main.c文件,生成名为main_program的可执行文件。

       此外,GCC还允许你使用多个-I选项来指定多个头文件搜索路径。编译器会按照这些路径的顺序进行搜索,直到找到所需的头文件为止。如果编译器在指定的路径和默认路径中都没有找到头文件,那么编译过程就会报错,提示找不到头文件。

        需要注意的是,-I选项只影响编译阶段,对链接阶段没有影响。如果你需要指定库文件的路径,应该使用-L选项。同时,如果你需要链接特定的库,应该使用-l选项(注意这里不需要加前缀lib和文件后缀,如.so或.a)。

 为了方便后续重复编译源文件,可以在项目目录下创建一个Makefile,Makefile当中的内容如下:

test:main.c
        gcc -o $@ $^ -std=c99 -I /root/MYSQL/usr/include -L /root/MYSQL/usr/lib/x86_64-linux-gnu -lmysqlclient
.PHONY:clean
        rm -rf test

注意:

  1. 头文件路径:/root/MYSQL/usr/include
  2. 库路径:/root/MYSQL/usr/x86_64-linux-gun

我们使用gcc来编译,运行起来报错了!!链接错误通常表明编译器在链接阶段找不到C++标准库中的一些必需函数和对象的定义。c++?这就说明我们应该使用g++来编译!!!

​test:main.c
        g++ -o $@ $^ -std=c++11 -I /root/MYSQL/usr/include -L /root/MYSQL/usr/lib/x86_64-linux-gnu -lmysqlclient
.PHONY:clean
        rm -rf test

很好和我们的版本对上了!!! 

 如果想要其他更多的使用方法,请去:【Linux】基础I/O——动静态库的制作_linux编译静态库-CSDN博客

猜你喜欢

转载自blog.csdn.net/2301_80224556/article/details/143205522