7

Linux で C++ を使用して mysql データベースに接続したいと考えています。ローカル マシンで Ubuntu を実行しており、mysql サーバーとクライアント パッケージをインストールしています。

sudo apt-get install mysql-server mysql-client

Mysql++に出会いましたが、バイナリ パッケージから ./configure を実行すると問題が発生します。エラーは言う:

MySQL ライブラリ ディレクトリをチェックしています... configure: エラー: '/usr/lib64 /usr/lib /usr/lib64/mysql /usr/lib/mysql /usr/local/lib64 /usr/local に mysqlclient ライブラリが見つかりませんでした/lib /usr/local/lib/mysql /usr/local/mysql/lib /usr/local/mysql/lib/mysql /usr/mysql/lib/mysql /opt/mysql/lib /opt/mysql/lib/mysql /sw/lib /sw/lib/mysql'

このコマンドを使用してパスを指定できる場所がわかります。

./configure --with-mysql-lib=/...

しかし、私はそれをどこに向けるべきかわかりません。whereis mysql を使用しましたが、lib サブディレクトリを含む mysql ディレクトリが見つかりません。mysqlclient ライブラリはどこにインストールされますか?


編集:

見つけた後、libmysqlclient私は戻ってきました

/usr/lib/i386-linux-gnu/libmysqlclient.so.18
/usr/lib/i386-linux-gnu/libmysqlclient.so.18.0.0
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18.0.0
/usr/share/doc/libmysqlclient18
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
/usr/share/doc/libmysqlclient18/copyright
/var/cache/apt/archives/libmysqlclient18_5.5.22-0ubuntu1_i386.deb
/var/lib/dpkg/info/libmysqlclient18:i386.list
/var/lib/dpkg/info/libmysqlclient18:i386.md5sums
/var/lib/dpkg /info/libmysqlclient18:i386.postinst
/var/lib/dpkg/info/libmysqlclient18:i386.postrm
/var/lib/dpkg/info/libmysqlclient18:i386.shlibs

というわけで試し./configure --with-mysql-lib=/usr/lib/i386-linux-gnu てみたところ、文句なしに完了したようです。

これで ./configure を完了するという問題は解決しましたが、まだ問題が残っています。私が実行するとmake、この時点までうまくいきます:

./lib/sql_buffer.h:31:0 からインクルードされたファイルでは、./lib/sql_buffer.cpp:26 から: ./lib/refcounted.h:258:2: エラー: 'size_t' は型に名前を付けていません。 /lib/refcounted.h: コンストラクター 'mysqlpp::RefCountedPointer::RefCountedPointer()': ./lib/refcounted.h:89:2: エラー: クラス 'mysqlpp::RefCountedPointer' には 'refs_ という名前のフィールドがありません' ./lib/refcounted.h: コンストラクター 'mysqlpp::RefCountedPointer::RefCountedPointer(T*)': ./lib/refcounted.h:100:2: エラー: クラス 'mysqlpp::RefCountedPointer' には何もありません'refs_' という名前のフィールド ./lib/refcounted.h:104:4: エラー: 'refs_' はこのスコープで宣言されていません ./lib/refcounted.h:104:16: エラー: 'size_t' の前に型指定子が必要です./lib/refcounted.h:104:16: エラー: 予想される ';' 'size_t' ./lib/refcounted.h の前: コンストラクター 'mysqlpp::RefCountedPointer:: 内

私は C++ に詳しくないので、エラーの正確な意味がわかりません。この時点から Mysql++ セットアップを取得する方法についてのヘルプまたは指示は大歓迎です。ただし、使用する代替ライブラリも探し始めていることは認めます。

4

2 に答える 2

9

この問題はsize_t、構成 (make) ファイルで呼び出される前に stddef 名前空間を含めることに依存するために発生します。

私はまったく同じ問題を抱えており(Amazon EC2 ubuntu 12.04クラウドサーバーを使用)、問題のsql_buffer.cppあるファイル(私の場合は /home/ubuntu/mysql++-3.1.0/lib にあります)を編集し、stddefを含めて解決しました(文字列名前空間を上に移動):

#include <stddef.h>
#include <string.h>
#include "sql_buffer.h"

あなたの質問はこの修正で答えられます。しかし、私がしたように、追加の問題が発生する可能性があります。それで、あなたが持っているかもしれないし、持っていないかもしれないいくつかの問題をどのように解決したかを説明します.

使用する必要があるかもしれません

sudo chown username sql_buffer.cpp

インストールのセットアップ方法に応じて、ファイルを編集できるようにします(たとえば、ubuntuユーザーです)。

その後、別の問題にぶつかりました:

./ssx/genv2.cpp: In function âbool generate_ssqls2(const char*, const ParseV2*)â:
./ssx/genv2.cpp:70:28: error: âstrcmpâ was not declared in this scope

だから私は問題のあるファイル()を編集し、genv2.cpp文字列の名前空間を含めました

#include <string.h>

それから私は別の問題を抱えていました:

./libmysqlpp_ssqls2parse.a(ssqls2parse_parsev2.o): In function `Type':
/home/ubuntu/mysql++-3.1.0/./ssx/parsev2.cpp:256: undefined reference to `mysqlpp::internal::str_to_lwr

編集することもできましMakefile.inたが、単にコマンドラインで実行することを選択しました:

sudo  g++ -o test_ssqls2 test_ssqls2_ssqls2.o -lmysqlpp_ssqls2parse   -L. -lmysqlclient   -L/usr/lib/x86_64-linux-gnu  -lmysqlpp

その後、プロセスを続行しましたmake

それは私のために働いた:mysql ++がインストールされ、実行されています。

于 2012-10-11T14:42:19.150 に答える
1

You need to install the header (dev) files, I assume one of these:

apt-cache search mysql
...
libmysqlclient-dev - MySQL database development files
libmysqlclient16 - MySQL database client library
libmysql++-dev - MySQL C++ library bindings (development)
libmysqlcppconn-dev - MySQL Connector for C++ (development files)
...

--with-mysql-lib should not be necessary because the files will be installed in the default locations.

于 2012-06-01T11:42:30.967 に答える