昨天我使用this page上的说明将mysql从5.5升级到5.6,一切顺利,mysql客户端连接,我没有丢失任何数据或类似的坏事。
今天我去了我的一个使用mysql库的C程序。我的失败是因为我没有得到mysql_config --cflags
和mysql_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
这就是我用来编译并仍然得到错误
答案 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>
。