web-dev-qa-db-fra.com

Impossible de trouver le fichier mysql.h

j'essaie d'installer la connexion entre c ++ et mysql dans ubuntu 12.04. j'ai installé mysql-client, mysql-server, libmysqlclient15-dev, libmysql ++ - dev. mais quand j'essaie de compiler le code, j'ai eu l'erreur: mysql.h there is no such file. j'ai regardé dans les dossiers, il y a un fichier mysql.h, je ne comprends pas pourquoi il ne le trouve pas. voici mon code:

 /* 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);
    }

cela a fonctionné, mais maintenant je suis confronté à une autre erreur comme:

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
30
Begayim Muratalina

Le mysql.h fichier du libmysqlclient-dev Le paquet Ubuntu se trouve à /usr/include/mysql/mysql.h.

Ce n'est pas un chemin de recherche standard pour les compilateurs, cependant /usr/include est.

Vous utiliseriez généralement le mysql.h en-tête dans votre code comme ceci:

#include <mysql/mysql.h>

Si vous ne souhaitez pas spécifier le décalage de répertoire dans votre source, vous pouvez passer le -I flag à gcc (si c'est ce que vous utilisez) pour spécifier un répertoire de recherche d'inclusion supplémentaire, et vous n'aurez pas besoin de changer votre code existant.

par exemple.

gcc -I/usr/include/mysql ...
50
Austin Phillips

il suffit d'utiliser

$ apt-get install libmysqlclient-dev 

qui tirera automatiquement la dernière libmysqlclient18-dev

J'ai vu des versions plus anciennes de libmysqlclient-dev (comme 15) mettre le mysql.h dans des endroits étranges, par exemple/usr/local/include etc.

sinon, faites juste un

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

et mettez le chemin du dossier de votre mysql.h avec le drapeau -I dans votre fichier make. Pas propre mais fonctionnera.

24
Waqas

Pour CentOS/RHEL:

yum install mysql-devel -y
14
Ryan K

Vous n'avez probablement pas inclus le chemin vers les en-têtes mysql, qui peut être trouvé dans/usr/include/mysql, sur plusieurs systèmes Unix je pense. Voir ce post , cela peut être utile.

Par ailleurs, lié à la question de ce gars ci-dessus, sur la configuration syntaxique. On peut ajouter ce qui suit à votre ~/.vimrc:

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

et vous pouvez toujours vérifier les page wiki des développeurs sur github. Prendre plaisir!

3
user4713908

Vous devez indiquer au compilateur où se trouve le fichier mysql.h. Cela peut être fait en donnant le chemin vers l'en-tête avant la compilation. Dans les IDE, vous avez un paramètre où vous pouvez donner ces chemins.

Cette lien vous donne plus d'informations sur les options à utiliser lors de la compilation.

À votre deuxième problème Vous devez lier les bibliothèques. L'éditeur de liens doit savoir où se trouvent les fichiers de bibliothèque contenant l'implémentation des fonctions mysql que vous utilisez.

Ce lien vous donne plus d'informations sur la façon de lier les bibliothèques.

2
Sunil D S

Je pense que vous pouvez essayer ce gcc -I/usr/include/mysql * . C -L/usr/lib/mysql -lmysqlclient -o *

2
CharlesX

Pour ceux qui utilisent Eclipse IDE.

Après avoir installé MySQL complet avec client mysql et serveur mysql et toutes les bibliothèques mysql dev,

Vous devrez informer Eclipse IDE des éléments suivants

  • Où trouver mysql.h
  • Où trouver libmysqlclient bibliothèque
  • La bibliothèque path to search for libmysqlclient

Voici comment procéder.

Pour ajouter mysql.h

1. GCC C Compiler -> Comprend -> Inclure les chemins (-l) puis cliquez sur + et ajoutez le chemin à votre mysql.h Dans mon cas, c'était /usr/include/mysql

enter image description here

Pour ajouter mysqlclient bibliothèque et chemin de recherche à l'endroit mysqlclient bibliothèque voir les étapes 3 et 4.

2. GCC C Linker -> Bibliothèques -> Bibliothèques (-l) puis cliquez sur + et ajoutez mysqlcient

enter image description here

3. GCC C Linker -> Bibliothèques -> Chemin de recherche de bibliothèque (-L) puis cliquez sur + et ajoutez chemin de recherche à mysqlcient =. Dans mon cas, c'était /usr/lib64/mysql car j'utilise un OS Linux 64 bits et un MySQL 64 bits Base de données.

Sinon, si vous utilisez un OS Linux 32 bits, vous pouvez trouver qu'il se trouve dans /usr/lib/mysql

enter image description here

0
Joseph Muithi