Я пытаюсь установить соединение между 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
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
Вы, вероятно, не указали путь к заголовкам mysql, который можно найти в / usr / include / mysql, на некоторых системах Unix, я думаю. Увидеть эта почта, это может быть полезно.
Кстати, связанный с вопросом тот парень выше, о синтетической конфигурации. Можно добавить следующее в ваш ~ / .vimrc:
let b:syntastic_c_cflags = '-I/usr/include/mysql'
и вы всегда можете проверить вики-страница разработчиков на github. Наслаждайтесь!
Вы должны сообщить компилятору, где находится файл mysql.h. Это можно сделать, указав путь к заголовку перед компиляцией. В IDE у вас есть настройка, где вы можете указать эти пути.
это ссылка на сайт дает вам больше информации о том, какие опции использовать при компиляции.
К вашей второй проблеме
Вам нужно связать библиотеки. Компоновщик должен знать, где находятся файлы библиотеки, в которых реализованы используемые вами функции mysql.
это ссылка на сайт дает вам больше информации о том, как связать библиотеки.
Я думаю, что вы можете попробовать этот gcc -I / usr / include / mysql *.c -L / usr / lib / mysql -lmysqlclient -o *