c++ - API 稳定的方式自动链接到 Debian 中的 MySQL 或 MariaDB 以实现向后兼容性

标签 c++ mysql cmake mariadb qmake

我从 Debian Jessie 升级到 Debian Stretch,现在发现 MariaDB 已经取代了 MySQL,这很好。

幸运的是,在 C++ 上,MariaDB 客户端仍然可以访问

#include <mysql/mysql.h>

但是,链接是不同的。以前是用-lmysqlclient链接,现在必须链接到-lmariadbclient

我的程序必须同时适用于两者。所以我的问题是:有没有办法检查 MySQL 是否可用,如果不可用,则链接到 MariaDB?

我在相关项目中使用qmakecmake。请指教。

最佳答案

对于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/

相关文章:

mysql - 正向工程mysql外键

linux - cmake qt6 static ubuntu : libicuuc. so.66:添加符号时出错:命令行中缺少 DSO

c++ - 在事先不知道特定成员函数的情况下从另一个类访问成员函数

c++ - ctags 不适用于多态函数

mysql - CakePHP 比较多个表中的字段

linux - `Cmake` 在调用 `target_link_libraries(target_name, library_name_without_postfix)` 时更喜欢链接到哪个库?

c++ - cmake:对任何 pcap 函数的 undefined reference

c++ - 模棱两可的错误 : C++11 use variadic template multiple inheritance

c++ - 如何使用 C++17 中的 type_traits 检测具有特定名称和签名的函数(非类成员)的存在

mysql - 自定义 MySQL 默认值