升级到5.6后找不到mysql / mysql.h

时间:2014-02-27 13:22:40

标签: mysql c makefile

昨天我使用this page上的说明将mysql从5.5升级到5.6,一切顺利,mysql客户端连接,我没有丢失任何数据或类似的坏事。

今天我去了我的一个使用mysql库的C程序。我的失败是因为我没有得到mysql_config --cflagsmysql_config --libs的正确标记。所以现在我的make文件的标志定义如下:

mysqlflags = -I/opt/mysql/server-5.6/include  -fPIC -g -fabi-version=2 -fno-omit-frame- pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1
mysqllibs  = -L/opt/mysql/server-5.6/lib -lmysqlclient -lpthread -lm -lrt -ldl

但是当我编译时,我得到了错误:

In file included from ./headers/controllers/comments.h:12:0,
             from src/controllers/comments.c:1:
./headers/db.h:4:26: fatal error: mysql/mysql.h: No such file or directory

所以我继续检查了我的include文件夹,确定没有标题:

ls /opt/mysql/server-5.6/include/mysql
client_authentication.h  innodb_priv.h      plugin_auth_common.h  plugin_ftparser.h.pp           service_my_plugin_log.h  service_thd_alloc.h
client_plugin.h                    plugin_auth.h         plugin.h                    service_my_snprintf.h    service_thd_wait.h
client_plugin.h.pp       plugin_audit.h     plugin_auth.h.pp       plugin_validate_password.h  service_mysql_string.h   service_thread_scheduler.h
get_password.h           plugin_audit.h.pp  plugin_ftparser.h     psi                         services.h               thread_pool_priv.h`

如果我查看一个目录,在include文件夹中我有

 ls /opt/mysql/server-5.6/include/
big_endian.h                 keycache.h       my_byteorder.h  my_global.h   mysql_com_server.h  mysql_version.h    plugin_validate_password.h  typelib.h
byte_order_generic.h         little_endian.h  my_compiler.h   my_list.h     mysqld_ername.h     my_sys.h           sql_common.h
byte_order_generic_x86_64.h  m_ctype.h        my_config.h     my_net.h      mysqld_error.h      my_xml.h           sql_state.h
byte_order_generic_x86.h     m_string.h       my_dbug.h       my_pthread.h  mysql_embed.h       plugin_audit.h     sslopt-case.h
decimal.h                    my_alloc.h       my_dir.h        mysql         mysql.h             plugin_ftparser.h  sslopt-longopts.h
errmsg.h                     my_attribute.h   my_getopt.h     mysql_com.h   mysql_time.h        plugin.h           sslopt-vars.h

看到mysql.h让我说,哦,好吧,它只是在错误的地方。我试过做

#include <mysql.h>看看它是否会捡起来,没有骰子。我尝试将mysql.h文件复制到mysql /文件夹,但这也没有做任何事情,当我做locate mysql.h时,它只显示了include文件夹中的那个。

有人能指出一些关于为mysql 5.6和5.5进行开发的变更的文档吗? documentation并没有说我还没有做过的事情

编辑: 这是makefile输出的相关部分

cc -I/opt/mysql/server-5.6/include/mysql  -fPIC -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1 -I./headers -std=gnu99 -pedantic -Wall -Wextra -Werror -g -c src/database/db.c -o obj/db.o     
In file included from src/database/db.c:1:0:
./headers/db.h:4:26: fatal error: mysql/mysql.h: No such file or directory
compilation terminated.

另外我重新考虑mysql --cflags以确保我在上面写错了,实际输出是

-I/opt/mysql/server-5.6/include/mysql -fPIC -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1

这就是我用来编译并仍然得到错误

1 个答案:

答案 0 :(得分:0)

您已添加

/opt/mysql/server-5.6/include/mysql

作为包含路径,然后在您的标头文件中#include <mysql/mysql.h>。这是相对于包含路径,因此(除了默认的包含路径),编译器正在查找带有路径的文件

/opt/mysql/server-5.6/include/mysql/mysql/mysql.h

它找不到。您应该将代码更改为#include <mysql.h>或将传递给编译器的包含路径更改为/opt/mysql/server-5.6/include

编辑:

抱歉,我刚才意识到mysql.h位于/opt/mysql/server-5.6/include/mysql.h,而不是/opt/mysql/server-5.6/include/mysql/mysql.h。 您必须同时执行这两项操作:将/opt/mysql/server-5.6/include添加为包含路径,然后将代码更改为#include <mysql.h>