it-swarm.com.de

Die Datei mysql.h wurde nicht gefunden

ich versuche, die Verbindung zwischen C++ und MySQL in Ubuntu 12.04 zu installieren. Ich habe MySQL-Client, MySQL-Server, libmysqlclient15-dev, libmysql ++ - dev installiert. aber wenn ich versuche, den Code zu kompilieren, erhalte ich den Fehler: mysql.h there is no such file. Ich habe in den Ordnern gesucht, es gibt eine mysql.h-Datei. Ich kann nicht verstehen, warum sie nicht gefunden wird. Hier ist mein 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);
    }

es hat funktioniert, aber jetzt stehe ich vor einem anderen Fehler wie:

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

Das mysql.h Datei aus dem libmysqlclient-dev Ubuntu-Paket befindet sich unter /usr/include/mysql/mysql.h.

Dies ist kein Standard-Suchpfad für Compiler, jedoch /usr/include ist.

Normalerweise verwenden Sie mysql.h Header in Ihrem Code wie folgt:

#include <mysql/mysql.h>

Wenn Sie den Verzeichnisoffset in Ihrer Quelle nicht angeben möchten, können Sie das -I flag to gcc (Wenn dies das ist, was Sie verwenden), um ein zusätzliches Include-Suchverzeichnis anzugeben, und dann müssten Sie Ihren vorhandenen Code nicht ändern.

z.B.

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

benutz einfach

$ apt-get install libmysqlclient-dev 

das wird automatisch die neueste libmysqlclient18-dev ziehen

Ich habe gesehen, dass ältere Versionen von libmysqlclient-dev (wie 15) die mysql.h an seltsamen Orten platzieren, z./usr/local/include usw.

ansonsten mache einfach a

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

und lege den Ordnerpfad deines mysql.h mit -I-Flag in Ihrer Make-Datei. Nicht sauber, wird aber funktionieren.

24
Waqas

Für CentOS/RHEL:

yum install mysql-devel -y
14
Ryan K

Wahrscheinlich haben Sie den Pfad zu mysql-Headern, der sich unter/usr/include/mysql befindet, auf mehreren Unix-Systemen, wie ich finde, nicht angegeben. Siehe dieser Beitrag , es kann hilfreich sein.

Übrigens, im Zusammenhang mit der Frage von dieser Typ über die syntastische Konfiguration. Man kann Folgendes zu Ihrer ~/.vimrc hinzufügen:

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

und du kannst immer das wiki page der entwickler auf github überprüfen. Genießen!

3
user4713908

Sie müssen dem Compiler mitteilen, wo sich die Datei mysql.h befindet. Dies können Sie tun, indem Sie vor dem Kompilieren den Pfad zum Header angeben. In IDEs haben Sie eine Einstellung, in der Sie diese Pfade angeben können.

Dieser Link gibt Ihnen weitere Informationen darüber, welche Optionen beim Kompilieren verwendet werden sollen.

Zu Ihrem zweiten Problem Sie müssen die Bibliotheken verknüpfen. Der Linker muss wissen, wo sich die Bibliotheksdateien befinden, die die Implementierung für die von Ihnen verwendeten mysql-Funktionen haben.

Mit diesem Link erhalten Sie weitere Informationen zum Verknüpfen von Bibliotheken.

2
Sunil D S

Ich denke, Sie können dies versuchen gcc -I/usr/include/mysql * . C -L/usr/lib/mysql -lmysqlclient -o *

2
CharlesX

Für diejenigen, die Eclipse IDE. verwenden

Nach der Installation von MySQL zusammen mit mysql client und mysql server und allen mysql dev Bibliotheken,

Sie müssen Eclipse IDE über Folgendes informieren

  • Wo zu finden mysql.h
  • Wo zu finden libmysqlclient Bibliothek
  • Die Bibliothek path to search for libmysqlclient

Hier ist, wie Sie vorgehen.

Hinzufügen mysql.h

1. GCC C Compiler -> Includes -> Include-Pfade (-l), dann auf + klicken und Pfad zu Ihrer mysql.h hinzufügen. In meinem Fall war es /usr/include/mysql

enter image description here

Um mysqlclient library und search path where mysqlclient library hinzuzufügen, siehe Schritte 3 und 4.

2. GCC C Linker -> Libraries -> Libraries (-l), dann auf + klicken und mysqlcient hinzufügen

enter image description here

3. GCC C Linker -> Bibliotheken -> Bibliothekssuchpfad (-L), dann auf + klicken und Suchpfad zu mysqlcient Hinzufügen =. In meinem Fall war es /usr/lib64/mysql, weil ich ein 64-Bit-Linux-Betriebssystem verwende und ein 64-Bit-MySQL Datenbank.

Andernfalls, wenn Sie ein 32-Bit-Linux-Betriebssystem verwenden, finden Sie es möglicherweise unter /usr/lib/mysql

enter image description here

0
Joseph Muithi