40

私はubuntu12.04でc++とmysqlの間の接続をインストールしようとしています。mysql-client、mysql-server、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
4

9 に答える 9

60

Ubuntuパッケージのmysql.hファイルはにあります。libmysqlclient-dev/usr/include/mysql/mysql.h

これはコンパイラの標準的な検索パスではありませんが、標準の検索パス/usr/includeです。

通常mysql.h、コードでは次のようにヘッダーを使用します。

#include <mysql/mysql.h>

ソースでディレクトリオフセットを指定したくない場合は、-Iフラグをgccに渡して(使用している場合)、追加のインクルード検索ディレクトリを指定できます。そうすれば、既存のコードを変更する必要はありません。 。

例えば。

gcc -I/usr/include/mysql ...
于 2013-01-30T13:00:13.623 に答える
36

使用するだけ

$ apt-get install libmysqlclient-dev 

これにより、最新のlibmysqlclient18-devが自動的にプルされます

古いバージョンのlibmysqlclient-dev(15など)がmysql.hを奇妙な場所(たとえば/ usr / local / includeなど)に配置するのを見てきました。

それ以外の場合は、

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

mysql.hそして、makeファイルに-Iフラグを付けてフォルダパスを配置します。きれいではありませんが、動作します。

于 2013-12-17T12:42:15.973 に答える
18

CentOS / RHELの場合:

yum install mysql-devel -y
于 2014-03-21T18:27:48.620 に答える
5

これは私のために働いた

$ gcc dbconnect.c -o dbconnect -lmysqlclient
$ ./dbconnect

-lmysqlclientは必須です。

また、-Iコンパイルフラグを使用する代わりに、次の表記を使用することをお勧めします。

#include <mysql/mysql.h>
于 2020-05-13T07:50:00.783 に答える
3

おそらく、いくつかのUNIXシステムでは、/ usr / include/mysqlにあるmysqlヘッダーへのパスを含めていないと思います。この投稿を参照してください、それは役に立つかもしれません。

ちなみに、上記のの質問に関連して、シンタスティックな構成について。〜/.vimrcに以下を追加できます。

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

githubで開発者のwikiページをいつでも確認できます。楽しみ!

于 2015-03-25T23:00:37.897 に答える
2

mysql.hファイルがどこにあるかをコンパイラーに知らせる必要があります。これは、コンパイルする前にヘッダーへのパスを指定することで実行できます。IDEには、これらのパスを指定できる設定があります。

このリンクは、コンパイル中に使用するオプションに関する詳細情報を提供します。

2番目の問題 にライブラリをリンクする必要があります。リンカは、使用するmysql関数の実装があるライブラリファイルがどこにあるかを知る必要があります。

このリンクは、ライブラリをリンクする方法に関する詳細情報を提供します。

于 2013-01-30T12:44:45.863 に答える
2

このgcc-I/ usr / include / mysql * .c -L / usr / lib / mysql -lmysqlclient-o*を試すことができると思います

于 2014-03-04T00:17:34.590 に答える
1

EclipseIDEを使用している人向け

完全なMySQLをmysqlクライアントmysqlサーバーおよび任意のmysqldevライブラリと一緒にインストールした後、

EclipseIDEに次のことを伝える必要があります

  • mysql.hの場所
  • libmysqlclientライブラリの場所
  • libmysqlclientライブラリを検索するためのパス

これがあなたのやり方です。

mysql.hを追加するには

1。GCCCコンパイラ->インクルード->インクルードパス(-l)次に、+をクリックしてmysql.hにパスを追加します。私の場合は/ usr / include/mysqlでした。

ここに画像の説明を入力してください

mysqlclientライブラリと検索パスmysqlclientライブラリの場所に追加するには、手順34を参照してください。

2。GCCCリンカー->ライブラリ->ライブラリ(-l)次に、[ + ]をクリックしてmysqlcientを追加します

ここに画像の説明を入力してください

3GCC Cリンカー->ライブラリ->ライブラリ検索パス(-L)次に、[ + ]をクリックして、検索パスmysqlcientに追加します。私の場合、64ビットのLinux OS64ビットのMySQLデータベースを使用しているため、/ usr / lib64/mysqlでした。

それ以外の場合、32ビットのLinux OSを使用している場合は、 / usr / lib/mysqlにあることがわかります。

ここに画像の説明を入力してください

于 2019-04-16T10:26:47.253 に答える
1

これは私のために働いた

yum install mysql

mysqlクライアントをインストールしてから

pip install mysqlclient
于 2021-02-15T10:30:42.233 に答える