MySQL库中没有初始化函数

时间:2013-11-05 21:20:00

标签: mysql linker-errors libraries mysql-connector

我已经从官方网站下载了MySQL Connector/C driver,我认为该版本应该会在5.6旁边发布。

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

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

我找到的功能是mysql_server_initmysql_server_endaccording to the documentation,标记为已弃用。 (那里还有更多的功能)

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

1 个答案:

答案 0 :(得分:1)

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

我是DBA,不是C程序员,尽管我涉足服务器内部。如果MySQL服务器源文件中的文件include/mysql.h是任何指示,那么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是一个同样问题的报告,他们从来没有真正开始做任何事情。

您可能还会发现“{3}} C ++”对于MariaDB和MySQL来说是一个可行且可能更合适许可的替代方案。