如何在 FreeBSD 10 上将 mysql56-client 编译为 USE_OLD_FUNCTIONS?

如何在 FreeBSD 10 上将 mysql56-client 编译为 USE_OLD_FUNCTIONS?

编辑:我解决了我的问题- 我编辑了错误的包含文件。请参阅本文末尾的修复方法。

我正在将一些应用程序从旧的 FreeBSD 4.3 服务器迁移到新的 FreeBSD 10 服务器。这些是使用 MySQL C API 的 C 应用程序。它们非常老旧,并且使用函数mysql_connect(在较新版本的 MySQL 中已弃用)。从我查看 MySQL 源代码所得到的信息来看,MySQL 客户端 API 需要用 进行编译USE_OLD_FUNCTIONS。不幸的是,我不知道如何做到这一点。我正在尝试使用 FreeBSD 端口系统安装 MySQL 5.6。我做了以下操作,我认为应该可以工作:

cd /usr/ports/databases/mysql56-client
make fetch
make extract
make configure

然后我work/mysql-5.6.16/include/config.h在最后编辑并添加了以下一行:

#define USE_OLD_FUNCTIONS

然后我编译并安装客户端:

make
make install

mysql_config显示以下内容:

# mysql_config --libs
-L/usr/local/lib/mysql -lmysqlclient  -pthread -lm
# mysql_config --cflags
-I/usr/local/include/mysql -pipe -fno-strict-aliasing -g -DNDEBUG

当我尝试编译一个非常简单的测试客户端(如下所示)时,出现链接器错误,提示undefined reference to 'mysql_connect'。测试客户端代码如下:

#define USE_OLD_FUNCTIONS
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
  MYSQL *sock;
  sock = mysql_connect(NULL, NULL, "root", "test");
  mysql_close(sock);
}

当我尝试编译它时,出现链接器错误:

# clang -o test -I/usr/local/include/mysql -pipe -fno-strict-aliasing -g -DNDEBUG test.c -L/usr/local/lib/mysql -lmysqlclient -pthread -lm
/tmp//ccTJC9Ov.o: In function `main':
/root/admin/test.c:8: undefined reference to `mysql_connect'
collect2: ld returned 1 exit status

以下测试程序使用了较新的mysql_real_connect函数,使用相同的编译器参数就可以很好地进行编译,并且运行时不会出现错误:

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
  MYSQL *sock;
  sock = mysql_init(NULL);
  mysql_real_connect(sock, NULL, "root", "test", NULL, 0, NULL, 0);
  mysql_close(sock);
}

知道我哪里做错了吗?MySQL 文档USE_OLD_FUNCTIONS似乎不存在。我不能责怪他们,因为这些函数已经被弃用了一段时间长的时间,但代码似乎仍然存在。

解决方案:

我想我已经搞明白了。work/mysql-5.6.16/include/config.h我不应该编辑,而应该编辑work/mysql-5.6.16/include/my_config.h。我在后一个文件中添加了以下内容,重新编译了 MySQL,现在我的测试程序可以正常编译和链接了。

#define USE_OLD_FUNCTIONS

请注意,我将其添加到文件my_config.h末尾之前。希望这能在未来帮助到其他人。#endif

答案1

我想我已经搞明白了。work/mysql-5.6.16/include/config.h我不应该编辑,而应该编辑work/mysql-5.6.16/include/my_config.h。我在后一个文件中添加了以下内容,重新编译了 MySQL,现在我的测试程序可以正常编译和链接了。

#define USE_OLD_FUNCTIONS

请注意,我将其添加到文件my_config.h末尾之前。希望这能在未来帮助到其他人。#endif

相关内容