質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

568閲覧

eclipse C++ mysqlcppconn.dll を使うとメモリアクセス違反になってしまいます

kit_break

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/08/09 08:31

###発生している問題・エラーメッセージ

エラー Application Error 1000 (100) "障害が発生しているアプリケーション名: ファイル名.exe、バージョン: 0.0.0.0、タイム スタンプ: 0x598ac24c 障害が発生しているモジュール名: mysqlcppconn.dll、バージョン: 0.0.0.0、タイム スタンプ: 0x59133d2e 例外コード: 0xc0000005 障害オフセット: 0x0002f32f

やりたいこと

eclipse C++ 環境で Connector/C++ を使いデータベースに接続を行いたいですができていません。 mysql.h を使ってデータベースに接続できることは確認できているのですが上手くいっていません。 eclipse C++ 環境だと サイトからインストールしたライブラリをただ使うだけでは接続できないのでしょうか?

###該当のソースコード

#include "mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> int main(void) { sql::Driver *driver; sql::Connection *con; driver = get_driver_instance(); //この部分で発生します コネクトするとエラーが発生し強制終了してしまいます。 con = driver->connect("tcp://127.0.0.1:3306", "root", ""); return 0; }

###試したこと
導入しているライブラリパスを見直したり、メモリのどこを参照していいるのかデバッガーを使って追っていますが特定できておりません。エラーコードも出ているのですが、エラーコード一覧に無い番号でしてた。

###補足情報(言語/FW/ツール等のバージョンなど)
eclipse 4.4 32bit
boost 1.64.0
connector/C++ 1.1.9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

まずは try/catch で例外を確認すべきかと思います。

cpp

1 try { 2 3 driver = get_driver_instance(); 4 driver->connect("tcp://127.0.0.1:3306", "root", ""); 5 } catch (sql::SQLException &e ) { 6 std::cout << "err: " << e.what() << ": " << e.getErrorCode() << std::endl; 7 }

#include <iostream> 追加して試して下さい。

投稿2017/08/09 08:42

編集2017/08/09 08:42
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kit_break

2017/08/09 08:48

見やすくするために try catch は書いておりませんでした。 そして、発生するエラーはバインドされていない Win32 の例外なので try catch では拾うことができないようです。
mattn

2017/08/09 08:52

0xc0000005 は不正アクセスなので driver が null ポインタの可能性高いです。 (が、発生モジュールが mysqlcppconn.dll なので内部でエラーになっている可能性もあります)
kit_break

2017/08/09 08:54

デバッガーで追った結果、driver は NULL でないことを確認しています。 最初に考えたのですが、driver = get_driver_instance(); 後にインスタンス生成が生成されているようです。
mattn

2017/08/09 08:56

リンクフラグ -stdlib=libc++ 付けて試して貰えますか。
kit_break

2017/08/09 09:02

試してみましたが結果は変わりませんでした。気になったので cout で driver の変数を表示してみました。 ドライバー生成前 0x401280 ドライバー生成後 0x7974e8 となっており driver = get_driver_instance(); 後にインスタンス生成がなされていると思うのですがどうなのでしょうか?
kit_break

2017/08/09 09:15

確かにそうですね。何が問題でどう解決したか書いてないのでお手上げ状態なんですよね。。。
mattn

2017/08/09 09:16

mysqlcppconn.dll はどの様に入手されたのでしょうか。コンパイルした物ならデバッガ で追うという方法もあるのですが。
kit_break

2017/08/09 09:19

mysqlcppconn.dll はサイトから MySQL Connector C++ 1.1.9 をインストールしたときに lib ディレクトリに入っていたものを使っています
mattn

2017/08/09 09:31

Eclipse for C++ は mingw を使っている様なので、Visual Studio 向けに作られたライブラリとリンクする事で問題が出ているのかもしれませんね。 https://www.eclipse.org/forums/index.php/t/1078545/ ここを見る限りですが -Wl,--image-base -Wl,0x10000000 を付けて解決したという人もいる様です。
kit_break

2017/08/09 10:10

eclipse 環境で dll が上手く動作しないということなのでしょうか。 だとするならば mysqlcppconn.dll を gcc で使えるように加工する必要があるのでしょうかね?
yumetodo

2017/08/09 10:57

mysqlcppconnはcmakeでビルドできるっぽいので、gccを指定してDebugモードでビルドしてしまうのも手かも
kit_break

2017/08/09 11:11

インストールしてあるmysqlcppconn.dllを cmake でビルドするということでしょうか?申し訳ありませんが具体的に教えて頂けますか?
kit_break

2017/08/09 21:48

OS は windows10 を使っているのですがこのサイトであっていますか?
kit_break

2017/08/10 04:48

失礼します。 cmake でビルドは完了しているのですがプロジェクトを立ち上げライブラリを生成しようとするとエラーが発生してしまいます。 エラーメッセージ mingw32-make[1]: *** [devapi/CMakeFiles/devapi.dir/all] Error 2 ちなみにコマンドラインでは cmake -G"Eclipse CDT4 - MinGW Makefiles" -DCMAKE_ECLIPSE_VERSION=4.4 -DBOOST_ROOT:STRING="/usr/local/boost_1_64_0" と入力し cmake でビルドは成功しています
mattn

2017/08/10 12:44

他のエラーメッセージは表示されていないという事でしょうか?もしコマンドラインから実行できるのであれば CMakeCache.txt や CMakeFiles を削除頂いたあと cmake -G "MinGW Makefiles" を実行してビルドしてみてもらえますか。おそらく他のエラーも表示されると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問