файл 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

24

Решение

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 ...
43

Другие решения

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

$ apt-get install libmysqlclient-dev

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

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

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

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

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

20

Для CentOS / RHEL:

yum install mysql-devel -y
13

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

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

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

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

2

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

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

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

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

1

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

1
По вопросам рекламы [email protected]