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

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

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

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

C++

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

838閲覧

C++でMYSQLに接続したいのですががエラー発生

kit_break

総合スコア14

MySQL

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

C++

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2017/07/31 05:09

###前提・実現したいこと
C++でMySQLに接続したいと思い公式のサンプルコートを実行しようとしていました。
しかし、
undefined reference to `__imp__ZN3sql5mysql19get_driver_instanceEv'というエラーが発生してしまいビルドできません。未定義への参照とのことですが何が悪いのでしょう?

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

エラーメッセージ undefined reference to `__imp__ZN3sql5mysql19get_driver_instanceEv' 未定義への参照

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

#include <driver/mysql_driver.h> #include <driver/mysql_connection.h> #include <driver/mysql_error.h> #include <cppconn/Statement.h> #include <cppconn/ResultSet.h> using namespace std; int main() { sql::mysql::MySQL_Driver *driver; //エラー発生 driver = sql::mysql::get_mysql_driver_instance(); return 0; }

###試したこと
静的ライブラリのパスを見直していますがうまくいっていません。

###補足情報(言語/FW/ツール等のバージョンなど)
eclipse 4.4
Connector/C++ 1.19

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

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

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

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

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

guest

回答1

0

ベストアンサー

リンクしているstatic libraryはmingw gccでビルドされていますか?名前マングリングが違う可能性が高いです。

投稿2017/07/31 06:43

yumetodo

総合スコア5850

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

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

kit_break

2017/07/31 08:20

返信ありがとうございます。 eclipse 環境でして プロパティ -> C/C++ 一般 -> パスおよびシンボル の ライブラリ に設定しています。(-l) libmysql mysqlcppconn-static mysqlcppconn ライブラリのパス (-L)の設定 libmysql のディレクトリ mysqlcppconn-static のディレクトリ mysqlcppconn のディレクトリ です コマンドは g++ -Wall "-Lmysqlcppconnのパス" "-Lmysqlcppconn-staticのパス" "-Llibmysqlのパス" -o mysql_connect.exe main.o -llibmysql -lmysqlcppconn-static -lmysqlcppconn  と表示されています。
yumetodo

2017/07/31 08:21

いや、だから、リンクしているstatic libraryはmingw gccでビルドされていますか?名前マングリングが違う可能性が高いです。
kit_break

2017/07/31 09:01

申し訳ありません。質問の意味を理解していなかったです。 確認したところビルドされていないようです。名前マングリングが異なっているかどうかはどう調べれば良いのでしょうか?
yumetodo

2017/07/31 10:34

>確認したところビルドされていないようです それ以前の問題だった・・・ static libarryのシンボル名はnmコマンドでリストアップできる他、頑張ればメモ帳でも見られます
kit_break

2017/07/31 10:51

nmコマンドを実行してみたのですが 設定しているライブラリはないようです。一応、MYSQLの公式のガイドに従って進めていたのですが加えて行わなければならないことがあるということでしょうか? (MYSQLのガイドには静0000000000000000 b .bss 0000000000000000 d .ctors 0000000000000000 d .data 0000000000000000 d .data$_ZTIN3sql12SQLExceptionE 0000000000000000 d .data$_ZTISt13runtime_error 0000000000000000 d .data$_ZTISt9exception 0000000000000000 N .debug_abbrev 0000000000000000 N .debug_aranges 0000000000000000 N .debug_frame 0000000000000000 N .debug_info 0000000000000000 N .debug_line 0000000000000000 N .debug_loc 0000000000000000 N .debug_macinfo 0000000000000000 N .debug_pubnames 0000000000000000 N .debug_pubtypes 0000000000000000 N .debug_ranges 0000000000000000 N .debug_str 0000000000000000 d .gcc_except_table 0000000000000000 r .rdata 0000000000000000 r .rdata$_ZTSN3sql12SQLExceptionE 0000000000000000 r .rdata$_ZTSSt13runtime_error 0000000000000000 r .rdata$_ZTSSt9exception 0000000000000000 t .text 0000000000000410 t _GLOBAL__I_main U _Unwind_SjLj_Register U _Unwind_SjLj_Resume U _Unwind_SjLj_Unregister U _ZNSolsEi U _ZNSt8ios_base4InitC1Ev U _ZNSt8ios_base4InitD1Ev U _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_x U _ZSt4cout U _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ 0000000000000000 b _ZStL8__ioinit U _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc U _ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E 0000000000000000 D _ZTIN3sql12SQLExceptionE 0000000000000000 D _ZTISt13runtime_error 0000000000000000 D _ZTISt9exception 0000000000000000 R _ZTSN3sql12SQLExceptionE 0000000000000000 R _ZTSSt13runtime_error 0000000000000000 R _ZTSSt9exception U _ZTVN10__cxxabiv117__class_type_infoE U _ZTVN10__cxxabiv120__si_class_type_infoE U __cxa_begin_catch U __cxa_end_catch U __gxx_personality_sj0 U __imp__ZN3sql5mysql19get_driver_instanceEv U __main 0000000000000000 t __tcf_0 U atexit 0000000000000020 T main的ライブラリのビルドはなかったような。。。)
kit_break

2017/07/31 10:51

すみません。ミスりました。
yumetodo

2017/07/31 11:03

nmコマンドの出力は非常に長いので、 nm -e -C libcurl.a | grep __imp__ZN3sql5mysql19get_driver_instanceEv のようにするといいです。まさかそれで全部ってことはあるまいて。 あいにくmysqlは手持ちにないのでlibcurlを覗いてみた例 $nm -e libcurl.a | grep Curl_base64_decode 00000000000002b0 T Curl_base64_decode U Curl_base64_decode U Curl_base64_decode U Curl_base64_decode U Curl_base64_decode U Curl_base64_decode U Curl_base64_decode
kit_break

2017/07/31 11:31

返信ありがとうございます 一応出力結果が出ました。張っていただいたlibcurl とは確かに違うようです $>nm -e -C main.o | grep __imp__ZN3sql5mysql19get_driver_instanceEv U __imp__ZN3sql5mysql19get_driver_instanceEv 静的ライブラリがビルドできていないということでしょうか?
yumetodo

2017/07/31 11:34

いや、main.oに対してじゃなくてllibmysqlに対して実行してください・・・
yumetodo

2017/07/31 11:35

ん? >コマンドは g++ -Wall "-Lmysqlcppconnのパス" "-Lmysqlcppconn-staticのパス" "-Llibmysqlのパス" -o mysql_connect.exe main.o -llibmysql -lmysqlcppconn-static -lmysqlcppconn  と表示されています。 -llibmysqlってなんだ、-lmysqlじゃないのか・・・?
kit_break

2017/07/31 11:38

-l でライブラリを指定しているので 実際は -l libmysql となっています。
yumetodo

2017/07/31 11:39

いやその理屈はおかしい、-lmysqlの場合libmysql.aを探しに行くはず
kit_break

2017/07/31 11:41

度たびすみません libmysql で実行した結果、ファイルが見つからないと出てきました。 $>nm -e -C libmysql | grep __imp__ZN3sql5mysql19get_driver_instanceEv nm: 'libmysql': No such file
yumetodo

2017/07/31 11:42

まずlibmysql.aがあるdirectoryに移動して実行せな・・・
kit_break

2017/07/31 12:16

確認しているのですがそもそも libmysql.a がどのディレクトリにもないようです。
yumetodo

2017/07/31 16:33

もしかして:mysqlをビルドしていない
kit_break

2017/08/07 04:07

解決しました。 原因は とある.dllが見付けれていなかったようです。 カレントディレクトリに配置し動作したところ未定義への参照は消えました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問