27.7.1 MySQL C API 实现
MySQL C API 是基于 C 的 API,用 C 编写的 Client 端应用程序可用于与 MySQL Server 通信。Client 端程序在编译时引用 C API 头文件,并在链接时链接到 C API 库文件。该库有两个版本,具体取决于应用程序与服务器进行通信的方式:
-
libmysqlclient
:库的 Client 端版本,用于作为独立服务器进程的 Client 端通过网络连接进行通信的应用程序。 -
libmysqld
:库的嵌入式服务器版本,用于打算在应用程序本身中包含嵌入式 MySQL 服务器的应用程序。该应用程序与其自己的专用服务器实例进行通信。
Note
从 MySQL 5.7.19 开始不推荐使用libmysqld
嵌入式服务器库,并将在 MySQL 8.0 中将其删除。
这两个库具有相同的接口。在 C API 调用方面,应用程序与独立服务器通信的方式与与嵌入式服务器通信的方式相同。可以将给定的 Client 端构建为与独立服务器或嵌入式服务器通信,具体取决于在构建时是针对libmysqlclient
还是libmysqld
进行链接。
要获取构建 C APIClient 端程序所需的 C API 头文件和库文件,请安装 MySQL 服务器发行版。服务器分发包括libmysqlclient
和libmysqld
。
您可以安装包含预构建的 C API 文件的二进制分发版,也可以使用源分发版和自己构建 C API 文件。
链接 C APIClient 端应用程序时要使用的库文件的名称取决于构建发行版的库类型和平台:
- 在 Unix(和类似 Unix 的)系统上,静态库是
libmysqlclient.a
。在大多数 Unix 系统上,动态库是libmysqlclient.so
,在 macOS 上是libmysqlclient.dylib
。
对于包含嵌入式服务器库的发行版,相应的库名称以libmysqld
而不是libmysqlclient
开头。
- 在 Windows 上,静态库为
mysqlclient.lib
,动态库为libmysql.dll
。 Windows 发行版还包含libmysql.lib
,这是使用动态库所需的静态 importlib。
对于包含嵌入式服务器库的发行版,相应的库名称为mysqlserver.lib
,libmysqld.dll
和libmysqld.lib
。
Windows 发行版还包括一组调试库。它们具有与非调试库相同的名称,但是位于lib/debug
库中。编译使用调试 C 运行时构建的 Client 端时,必须使用调试库。
在 Unix 上,您可能还会看到名称中包含_r
的库。在 MySQL 5.5 之前,这些库与非_r
库分开构建为线程安全(可重入)库。从 5.5 开始,两个库都相同,并且_r
名称是指向相应非_r
名称的符号链接。无需使用_r
库。例如,如果使用mysql_config获取链接器标志,则在所有情况下都可以使用mysql_config --libs,即使对于线程 Client 端也是如此。无需使用mysql_config --libs_r。