Подтвердить что ты не робот

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

Я пытаюсь установить соединение между С++ и 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
4b9b3361

Ответ 1

Файл mysql.h из пакета libmysqlclient-dev Ubuntu расположен в /usr/include/mysql/mysql.h.

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

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

#include <mysql/mysql.h>

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

например.

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

Ответ 2

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

$ apt-get install libmysqlclient-dev 

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

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

иначе, просто выполните

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

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

Ответ 3

Для CentOS/RHEL:

yum install mysql-devel -y

Ответ 4

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

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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

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

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

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

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

Добавить mysql.h

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

enter image description here

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

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

enter image description here

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

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

enter image description here