我已经从官方网站下载了MySQL Connector/C driver,我认为该版本应该会在5.6旁边发布。
然后我显然想使用这个库,所以我写了一个小应用程序。在链接期间,我遇到了一个奇怪的链接器错误,说它无法找到函数mysql_library_init()
和mysql_library_end()
。
当我使用命令检查库中的函数nm /usr/lib64/mysql/libmysqlclient.a > ~/Desktop/symbols
时,我确实找不到链接器提到的函数。
我找到的功能是mysql_server_init
和mysql_server_end
,according to the documentation,标记为已弃用。 (那里还有更多的功能)
我做错了什么?我正在使用驱动程序的6.1.2版。
答案 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来说是一个可行且可能更合适许可的替代方案。