首先,让我澄清一下这里的所有内容都是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年前,所以我假装它不存在。