致命错误mysql.h:编译期间没有这样的文件或目录

use*_*880 5 c++ mysql compiler-construction

我有以下代码

#include <my_global.h>
#include <mysql.h>

int main(int argc, char **argv)
{
  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它编译它

gcc mysqldb.c -o mysql -I/usr/include/mysql -lmysqlclient 
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说致命错误mysql.h:没有这样的文件或目录.我怎样才能成功编译和运行代码

小智 9

我不知道你的操作系统是否有一些变化.我的是Arch Linux,我安装了mariaDB.在包中,有一个名为"mysql_config"的程序,它可以提供编译程序的正确方法.通过runnig

$ mysql_config --help
Usage: /usr/bin/mysql_config [OPTIONS]
Options:
    --cflags         [-I/usr/include/mysql]
    --include        [-I/usr/include/mysql]
    --libs           [-L/usr/lib -lmysqlclient -lpthread -lz -lm -lssl   -lcrypto -ldl]
    --libs_r         [-L/usr/lib -lmysqlclient_r -lpthread -lz -lm -lssl -lcrypto -ldl]
    --plugindir      [/usr/lib/mysql/plugin]
    --socket         [/run/mysqld/mysqld.sock]
    --port           [0]
    --version        [10.0.17]
    --libmysqld-libs [-L/usr/lib -lmysqld]
    --variable=VAR   VAR is one of:
            pkgincludedir [/usr/include/mysql]
            pkglibdir     [/usr/lib]
            plugindir     [/usr/lib/mysql/plugin]
Run Code Online (Sandbox Code Playgroud)

你可以看到程序的控制标志.通过您的程序,我使用了以下内容:

$gcc main.c -o main $(mysql_config --libs --cflags)
Run Code Online (Sandbox Code Playgroud)

然后,通过runnig新程序'main'

$./main
MySQL client version: 10.0.17-MariaDB
Run Code Online (Sandbox Code Playgroud)

哪个明显成功了!

所以,我确信还有其他一些方法可以做到这一点,但现在这对我来说没问题.

小费

运行命令

$mysql_config --libs --cflags
Run Code Online (Sandbox Code Playgroud)

查看mysql_config生成的exacly标志.请享用!


3bu*_*bu1 7

检查是否/usr/include/mysql/mysql.h存在.如果您已在其他位置安装了头文件(例如/opt/mysql/include),请添加该位置-I/opt/mysql/include.


小智 5

今天我遇到了同样的错误,结果我忘记安装package了libmysqlclient-dev。我安装后

sudo apt install libmysqlclient-dev
Run Code Online (Sandbox Code Playgroud)

错误消失了。