4

MySQL C++ コネクタを使用してデータベースに接続しようとしています。ライブラリを追加すると、ソース コードは必要なすべての #include ステートメントで正しくコンパイルされます。私が使用しているコードは次のとおりです。

#include <stdlib.h>
#include <iostream>

#include "mysql_connection.h"

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

using namespace std;

int main(void)
{
    using namespace sql;

    Driver *driver;
    Connection *con;

driver = get_driver_instance();
con = driver -> connect("tcp://127.0.0.1:3306/test", "test", "test");
}

コードは例からそのまま引用されており、正しく動作するはずです。エラーがスローされる最後の "driver -> connect" 行にあるため、コードを大幅に短縮しました。私のエラーメッセージは次のとおりです。

*** glibc detected *** /home/username/NetBeansProjects/mysql/dist/Release/GNU-Linux-x86/mysql:
free(): invalid pointer: 0x091dd468 ***

Linux Mint Lisa を使用しており、最新バージョンの MySQL を実行し、NetBeans 7.1 を IDE として使用しています。前述のように、コードは正しくコンパイルされ、エラーが発生するのはこの最後の接続行です。別の接続メカニズムに関するヘルプや推奨事項をいただければ幸いです。


アップデート

接続が定義されている Driver クラスのコードを次に示します。

class CPPCONN_PUBLIC_FUNC Driver
{
protected:
virtual ~Driver() {}
public:
// Attempts to make a database connection to the given URL.

virtual Connection * connect(const sql::SQLString& hostName, const sql::SQLString& userName, const sql::SQLString& password) = 0;

virtual Connection * connect(ConnectOptionsMap & options) = 0;

...

そこには何も見えません...私の謙虚な意見では...

4

2 に答える 2

3

Ubuntu 12.04 でこの問題の解決策を見つけました。睡眠なしで約 48 時間かかりましたが、問題ありません。この修正は、他のバージョンの Ubuntu でも機能すると確信しています。http://www.sopcast.com/download/libstdcpp5.tgzから libstdc++.so.5 をダウンロードします。ファイルを抽出して /usr/lib に配置する必要があります。

g++ でアプリをビルドするときは、必ず -llibstdc++.so.5 を追加してください (これは stdc++ v5 にリンクします)。

次に、Google 'Connector c++ Ubuntu 12.04' でビルドを探し、Arch の .deb をダウンロードします。

Ubuntu 12.04 の場合、.debs の URL は次のとおりです https://launchpad.net/ubuntu/precise/+source/mysql-connector-c++/+buildsアーキテクチャを 選択してください。Amd64 を開き、Built Files の下に 2 つの .deb をダウンロードします。パッケージマネージャーを使用して開いてインストールします。問題なくアプリを実行できるはずです。

編集 libstdc++.so.5 をリンクする必要はありません。システムではリンクする必要があるかもしれませんが、Ubuntu 12.04 amd64 では必要ありません。

于 2012-05-12T10:40:30.047 に答える
1

C++ プログラムが 2 分以内に MySQL と通信できるようにします。

注: これは、MySQL (典型的な LAMP セットアップ) を備えた Ubuntu 12.04 サーバー (AWS EC2) で動作し、下位互換性は保証されません。

C++ プログラムから MySQL データベースにアクセスするには、最初に次のコマンド ラインを使用していくつかの mysql ライブラリ ファイルをインストールする必要があります。

sudo apt-get install libmysqlclient-dev

保存先と同じディレクトリに「mysql_config」という構成ファイルを保存します(そしてアプリを実行します-「/ temp」としましょう)

mysql_config --cflags
-I/usr/include/mysql  -DBIG_JOINS=1  -fno-strict-aliasing   -DUNIV_LINUX
mysql_config --libs
-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient

C++ ファイル「myapp.cpp」をコンパイルします。

sudo g++ -o myapp $(mysql_config --cflags) myapp.cpp $(mysql_config --libs)

Coding Friendsによって書かれたこの優れた機能例に基づいています

于 2012-09-11T19:40:48.810 に答える