web-dev-qa-db-ja.com

C ++ / mysqlコネクター-get_driver_instanceへの未定義の参照-簡単なものをすでに試しました

はい、この質問は以前に尋ねられました...私は以前の回答で述べられたすべてを試しました。私のセットアップは本当に簡単なので、これはそれほど難しいことではありません。

C++を使用してmysqlに対してプログラミングしたいだけです。私のソースコードは、「hello world」タイプの例から逐語的に取得されています。

http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-examples-complete-example-1.html

私はUbuntu 12.10を使用しています。やっています:

g++ -Wall -o firsttry_prog -I/usr/include/mysqlcppconn -I/usr/local/boost_1_53_0  -L/usr/lib/x86_64-linux-gnu -l:libmysqlclient_r.so.18 -L/usr/lib/mysqlcppconn -lmysqlcppconn  firsttry.cpp

コンパイルしますが(-cオプションを使用した場合)、ビルドされません。

/tmp/ccn768hj.o: In function `main':
firsttry.cpp:(.text+0x3a): undefined reference to `get_driver_instance'

いくつかの詳細:

  • 'firsttry.cpp'は、ソースコードファイルに名前を付けたものですが、公式の例から逐語的に解釈されます
  • ご覧のとおり、私はmysqlclientライブラリとmysqlcppconnでリンクしています図書館。この質問が以前に尋ねられたことが多いのですが、答えはそれらをリンクすることでした。
  • 他のいくつかの歴史的な答えは、サンプルのソースコードが間違っていること、問題の関数がsql :: mysql名前空間などにある必要があることを示唆しています。ソースコードは問題ないと確信しています。繰り返しますが、それはコンパイルされ、ソースコードの名前空間を変更すると、さらに悪化するようです。

あなたが提供できるあらゆる助けを前もってありがとう。

21
Ray in NY

だから私は今一週間この問題を抱えており、私もそれで非常にイライラしました。ようやく、mysqlへのログイン以外に何もしないプログラムをようやく構築することができ、文字通り喜びの声を上げました。ここに私が持っているものがあり、それが役に立てば幸いです。

私は最初にソースからc ++コネクタライブラリをコンパイルしましたが、しばらくして何か問題があると思ったので、aptを使用してそれを取得しました:

Sudo apt-get install  libmysqlcppconn-dev

そして、ここに私の簡単なテスターソースファイル「tester.cpp」があります。

#include <stdlib.h>
#include <iostream>
#include <mysql_connection.h>
#include <driver.h>
#include <exception.h>
#include <resultset.h>
#include <statement.h>

using namespace sql;
int main(void){
  sql::Driver *driver;
  sql::Connection *con;

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

  return 0;
}

そして最後にg ++コンパイルコマンド:

Sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp -L/usr/lib -lmysqlcppconn

これは私にとってうまくいきました、そしてあなたの問題を解決するのに役立つことを願っています!

31
d3l

私にとっては、最後の2つの引数の順序を交換するだけでこの問題が解決しました。理由はわかりませんが、ソースファイルの後の最後にget_driver_instanceオプションを指定すると、リンカは関数-lmysqlcppconnを見つけることができます。

g++ -Wall -o firsttry_prog -I/usr/include/mysqlcppconn -L/usr/lib/mysqlcppconn firsttry.cpp -lmysqlcppconn

また、次のオプションは冗長だと思うので、取り除いた。

-I/usr/local/boost_1_53_0  -L/usr/lib/x86_64-linux-gnu -l:libmysqlclient_r.so.18
9
Tarun

あなたが私と同じくらい忘れっぽくて、CMakeLists.txtでライブラリをリンクしなかった場合:

target_link_libraries(<target> mysqlcppconn)
6
nakajuice

すべてのパスが含まれている場合は、param -Iをスローします。次のようにコンパイルすると、問題があるかどうかがわかります。

g++ -g  -o0  -I/usr/local/include -I/usr/local/boost/include -c main.cpp -o main.o
g++ -g  -o0 -L/usr/local/lib -L/usr/local/mysql/lib -lmysqlcppconn  main.o  -o test  

問題が表示されます:

main.o: In function `main':
/home/huangxw/workspace/public/soal/test/main.cpp:165: undefined reference to `get_driver_instance'
collect2: ld returned 1 exit status

次に、-lmysqlcppconnmain.oの順序を調整する必要があります。

g++ -g  -o0  -I/usr/local/include -I/usr/local/boost/include -c main.cpp -o main.o
g++ -g  -o0 -L/usr/local/lib -L/usr/local/mysql/lib main.o  -o test  -lmysqlcppconn

以上です!!理由は簡単です。 Webを使用して調べるか、詳しく説明してください。

2
huangxiaowei