Файл 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. Не чисто, но будет работать.
Это сработало для меня
$ 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