MariaDB (/usr/include/mysql 和 libmysqlclient) 与 (/usr/include/mariadb、libmariadbclient 和 libmariadb) 的区别

3

首先,让我澄清一下这里的所有内容都是MariaDB - 实际上没有涉及到MySQL代码。

在Arch Linux中,我正在运行一个MariaDB服务器和客户端。我安装了mariadb package,它是从以下源代码构建的:

http://ftp.heanet.ie/mirrors/mariadb/mariadb-10.1.18/source/mariadb-10.1.18.tar.gz

这提供了:

  • /usr/include/mysql/* (141个.h文件)
  • /usr/lib/libmysqlclient.so
  • /usr/lib/libmysqld.so(我看到这是用于将MariaDB服务器嵌入应用程序中,但我不需要,因此在我的留言中将忽略它。)

我有一些C ++应用程序将访问MariaDB,并且我认为我还需要mariadb-connector-c,因此我在以下位置构建了标签v2.3.1

https://github.com/MariaDB/mariadb-connector-c

这提供了:

  • /usr/include/mariadb/* (40个.h文件)
  • /usr/lib/mariadb/libmariadbclient.a
  • /usr/lib/mariadb/libmariadb.so

问题1 -

libmysqlclient、libmariadbclient和libmariadb之间的目的和区别是什么?(忽略共享库与静态库之间的差异。)

问题2 -

/usr/include/mysql/mysql.h(来自http://ftp.heanet.ie/mirrors/mariadb/mariadb-10.1.18/source/mariadb-10.1.18.tar.gz

/usr/include/mariadb/mysql.h(来自https://github.com/MariaDB/mariadb-connector-c的标记v2.3.1)

非常相似,有很多相同的代码,但也有很大的不同。

我遇到了这个问题:/usr/include/mysql/mysql.h 定义如下:

const char * STDCALL mysql_error(MYSQL * myql);

但是/usr/include/mariadb/mysql.h定义了:

char * STDCALL mysql_error(MYSQL *mysql);

(注意返回值缺少const。)

此时我非常困惑,为什么每个函数都有声明,它们有什么不同,我应该使用哪一个等等。

注意,我知道mariadb++,但它的最后一次提交是3.5年前,所以我假装它不存在。

1个回答

3

1) libmysql 和 libmariadb (Connector/C) 主要区别在于许可证:libmysql 是基于 GPL 许可证下发布,而 Connector/C 是基于较不限制的 LGPL 许可证下发布,这允许在闭源应用中使用。

MariaDB Connector/C 2.3 (libmariadb) 支持所有 libmysql 的 API 调用和公共结构。版本 3.0 (目前是 beta 版) 提供了很多新功能,这些功能在 libmysql 中没有实现。

从 MariaDB Server 版本 10.2 (beta) 开始,Connector/C 3.0 将取代 server 包中的 libmysql。

2) 这是一个小 bug 已经修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接