0

我已经从官方网站下载了MySQL Connector/C 驱动程序,我认为该版本应该在 5.6 之后发布。

然后我显然想使用这个库,所以我写了一个小应用程序。然而,在链接期间,我收到了一个奇怪的链接器错误,说它找不到函数mysql_library_init()mysql_library_end().

当我使用命令检查库中的函数时nm /usr/lib64/mysql/libmysqlclient.a > ~/Desktop/symbols,我确实找不到链接器提到的函数。

但是,我确实找到的功能是mysql_server_initmysql_server_end根据文档,它们被标记为已弃用。(里面还有更多功能)

我究竟做错了什么?我正在使用 6.1.2 版的驱动程序。

4

1 回答 1

1

似乎问题在于文档在代码之前。

我是一名 DBA,而不是 C 程序员,虽然我涉足服务器内部。如果include/mysql.hMySQL 服务器源文件中的文件有任何指示,那么这些mysql_server_*函数就是您要查找的函数。

/*
  mysql_server_init/end need to be called when using libmysqld or
  libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so
  you don't need to call it explicitely; but you need to call
  mysql_server_end() to free memory). The names are a bit misleading
  (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general
  names which suit well whether you're using libmysqld or libmysqlclient. We
  intend to promote these aliases over the mysql_server* ones.
*/
#define mysql_library_init mysql_server_init
#define mysql_library_end mysql_server_end

“我们打算在 mysql_server* 上推广这些别名。”

显然,他们在文档中推广了它们。

看起来Bug #65887是对同一问题的报告,他们从未真正开始做任何事情。

您可能还会发现MariaDB 的“用于 MariaDB 和 MySQL”的 C API 实现是一种可行的并且可能更容易获得许可的替代方案。

于 2013-11-07T03:04:35.273 回答