Файл mysql.h не найден

Я пытаюсь установить соединение между C++ и MySQL в Ubuntu 12.04. я установил mysql-клиент, mysql-сервер, libmysqlclient15-dev, libmysql++-dev. но когда я пытаюсь скомпилировать код, я получаю сообщение об ошибке: mysql.h there is no such file, Я посмотрел в папках, там есть файл mysql.h, я не могу понять, почему он не может его найти. вот мой код:

 /* Simple C program that connects to MySQL Database server*/
    #include <mysql.h>
    #include <stdio.h>

    main() {
      MYSQL *conn;
      MYSQL_RES *res;
      MYSQL_ROW row;

      char *server = "localhost";
      char *user = "root";
      //set the password for mysql server here
      char *password = "*********"; /* set me first */
      char *database = "Real_flights";

      conn = mysql_init(NULL);

      /* Connect to database */
      if (!mysql_real_connect(conn, server,
            user, password, database, 0, NULL, 0)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
      }

      /* send SQL query */
      if (mysql_query(conn, "show tables")) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
      }

      res = mysql_use_result(conn);

      /* output table name */
      printf("MySQL Tables in mysql database:\n");
      while ((row = mysql_fetch_row(res)) != NULL)
          printf("%s \n", row[0]);

      /* close connection */
      mysql_free_result(res);
      mysql_close(conn);
    }

это работает, но теперь я сталкиваюсь с другой ошибкой, такой как:

mysql.c: In function ‘main’:
mysql.c:21: warning: incompatible implicit declaration of built-in function ‘exit’
mysql.c:27: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/ccinQBp8.o: In function `main':
mysql.c:(.text+0x3e): undefined reference to `mysql_init'
mysql.c:(.text+0x5e): undefined reference to `mysql_real_connect'
mysql.c:(.text+0x70): undefined reference to `mysql_error'
mysql.c:(.text+0xa5): undefined reference to `mysql_query'
mysql.c:(.text+0xb7): undefined reference to `mysql_error'
mysql.c:(.text+0xe7): undefined reference to `mysql_use_result'
mysql.c:(.text+0x11c): undefined reference to `mysql_fetch_row'
mysql.c:(.text+0x133): undefined reference to `mysql_free_result'
mysql.c:(.text+0x141): undefined reference to `mysql_close'
collect2: ld returned 1 exit status

9 ответов

Решение

mysql.h файл из libmysqlclient-dev Пакет Ubuntu находится по адресу /usr/include/mysql/mysql.h,

Это не стандартный путь поиска для компиляторов, однако /usr/include является.

Вы обычно используете mysql.h заголовок в вашем коде так:

#include <mysql/mysql.h>

Если вы не хотите указывать смещение каталога в вашем источнике, вы можете передать -I Установите флажок gcc (если это то, что вы используете), чтобы указать дополнительный каталог для поиска include, и тогда вам не нужно будет изменять существующий код.

например.

gcc -I/usr/include/mysql ...

Просто используйте

$ apt-get install libmysqlclient-dev 

который будет автоматически извлекать последнюю версию libmysqlclient18-dev

Я видел более старые версии libmysqlclient-dev (например, 15), которые помещают mysql.h в странные места, например, / usr / local / include и т. Д.

в противном случае, просто сделайте

$ find /usr/ -name 'mysql.h' 

и поместите путь к папке вашего mysql.h с флагом -I в вашем файле make. Не чисто, но будет работать.

Для CentOS/RHEL:

yum install mysql-devel -y

Это сработало для меня

$ gcc dbconnect.c -o dbconnect -lmysqlclient
$ ./dbconnect

-lmysqlclient обязательно.

и я лично рекомендовал бы использовать следующие обозначения вместо использования флага компиляции -I.

#include <mysql/mysql.h>

Вы, вероятно, не указали путь к заголовкам mysql, который можно найти в /usr/include/mysql, на некоторых системах Unix, я думаю. Смотрите этот пост, это может быть полезно.

Кстати, связанный с вопросом того Мати Тернер выше, о синтетической конфигурации. Можно добавить следующее в ваш ~/.vimrc:

let b:syntastic_c_cflags = '-I/usr/include/mysql'

и вы всегда можете проверить вики-страницу разработчиков на github. Наслаждайтесь!

Я думаю, что вы можете попробовать этот gcc -I / usr / include / mysql *.c -L / usr / lib / mysql -lmysqlclient -o *

Вы должны сообщить компилятору, где находится файл mysql.h. Это можно сделать, указав путь к заголовку перед компиляцией. В IDE у вас есть настройка, где вы можете указать эти пути.

Эта ссылка дает вам больше информации о том, какие опции использовать при компиляции.

Для вашей второй проблемы Вам нужно связать библиотеки. Компоновщик должен знать, где находятся файлы библиотеки, в которых реализованы используемые вами функции mysql.

Эта ссылка дает вам больше информации о том, как связать библиотеки.

Для тех, кто использует Eclipse IDE.

После установки полной версии MySQL вместе с клиентом mysql, сервером mysql и любыми библиотеками mysql dev,

Вам нужно будет рассказать Eclipse IDE о следующем

  • Где найти mysql.h
  • Где найти библиотеку libmysqlclient
  • Путь к поиску библиотеки libmysqlclient

Вот как ты это делаешь.

Добавить mysql.h

1 Компилятор GCC C -> Включает -> Включить пути (-l), затем нажмите + и добавьте путь к вашему mysql.h В моем случае это был / usr / include / mysql

Чтобы добавить библиотеку mysqlclient и найти путь к библиотеке mysqlclient, см. Шаги 3 и 4.

2 GCC C Linker -> Библиотеки -> Библиотеки (-l), затем нажмите + и добавьте mysqlcient

3 GCC C Linker -> Библиотеки -> Путь поиска в библиотеке (-L), затем нажмите + и добавьте путь поиска в mysqlcient. В моем случае это был /usr/lib64/mysql, потому что я использую 64-битную ОС Linux и 64-битную базу данных MySQL.

В противном случае, если вы используете 32-битную ОС Linux, вы можете обнаружить, что она находится в / usr / lib / mysql

Это сработало для меня

      yum install mysql

Он установит клиент mysql, а затем

      pip install mysqlclient
Другие вопросы по тегам