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

编辑:我解决了我的问题 – 我正在编辑错误的包含文件。 看到这个post的结尾的修复。

我正在将一些旧的FreeBSD 4.3服务器的应用程序迁移到新的FreeBSD 10服务器上。 这些是使用MySQL C API的C应用程序。 它们非常古老,使用mysql_connect函数(在较新版本的MySQL中不推荐使用)。 从我所能看到的MySQL源代码中,我们需要使用USE_OLD_FUNCTIONS编译MySQL客户端API。 不幸的是我不知道如何做到这一点。 我试图用FreeBSD ports系统安装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 

当我试图编译一个非常简单的testing客户端,如下所示,我得到一个链接器错误,说undefined reference to 'mysql_connect' 。 testing客户端代码如下:

 #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 

下面的testing程序,使用较新的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); } 

任何想法我要去哪里错了? USE_OLD_FUNCTIONS的MySQL文档似乎不存在。 我不能责怪他们,因为这些function已经被弃用了长时间,但是代码似乎仍然存在。

解:

我想我明白了。 不用编辑work/mysql-5.6.16/include/config.h ,我应该编辑work/mysql-5.6.16/include/my_config.h 。 我在后面的文件中添加了以下内容,重新编译了MySQL,而我的testing程序现在编译和链接就好了。

 #define USE_OLD_FUNCTIONS 

请注意,我在文件中的最后一个#endif之前将其添加到了my_config.h中。 希望这可以帮助未来的其他人。

我想我明白了。 不用编辑work/mysql-5.6.16/include/config.h ,我应该编辑work/mysql-5.6.16/include/my_config.h 。 我在后面的文件中添加了以下内容,重新编译了MySQL,而我的testing程序现在编译和链接就好了。

 #define USE_OLD_FUNCTIONS 

请注意,我在文件中的最后一个#endif之前将其添加到了my_config.h中。 希望这可以帮助未来的其他人。