我从 Debian Jessie 升级到 Debian Stretch,现在发现 MariaDB 已经取代了 MySQL,这很好。
幸运的是,在 C++ 上,MariaDB 客户端仍然可以访问
#include <mysql/mysql.h>
但是,链接是不同的。以前是用-lmysqlclient
链接,现在必须链接到-lmariadbclient
。
我的程序必须同时适用于两者。所以我的问题是:有没有办法检查 MySQL 是否可用,如果不可用,则链接到 MariaDB?
我在相关项目中使用qmake 和cmake。请指教。
最佳答案
对于cmake,您可以简单地使用:
find_library( MYSQL_LIBRARY
NAMES "mysqlclient" "mysqlclient_r"
PATHS "/lib/mysql"
"/lib64/mysql"
"/usr/lib/mysql"
"/usr/lib64/mysql"
"/usr/local/lib/mysql"
"/usr/local/lib64/mysql"
"/usr/mysql/lib/mysql"
"/usr/mysql/lib64/mysql" )
然后检查它:
if(MYSQL_LIBRARY) {
...
}
比如github中的例子:FindMYSQL(RenatoUtsch)或 FindMySQL(mloskot) .
对于qmake,我发现的唯一一件事就是检查这样的典型位置:
!exists("/foo/bar/baz.so"):!exists("/hello/world/baz.so"):...: message("...")
关于c++ - API 稳定的方式自动链接到 Debian 中的 MySQL 或 MariaDB 以实现向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45648132/