web-dev-qa-db-fra.com

Connecteur C ++ / MySQL - Référence non définie à Get_Driver_Instance - déjà essayé les choses faciles

Oui, cette question a déjà été posée ... J'ai tout essayé mentionné dans les réponses précédentes. Ma configuration est vraiment simple, donc cela ne devrait pas être si difficile.

Je veux juste programmer contre MySQL à l'aide de C++. Mon code source est pris Verbatem de l'exemple de type "Hello World" ici:

http://dev.mysql.com/doc/refman/5.1/fr/connector-cpp-examples-commlete-example-.html

Je suis sur Ubuntu 12.10. J'essaie:

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

Il compile (si j'utilise -c option) mais ne construira pas, me donnant le problème infâme:

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

Quelques détails:

  • 'Premierecteur.cpp' est juste ce que j'ai nommé le fichier de code source, à nouveau pris Verbatem de l'exemple officiel
  • Comme vous pouvez le constater, je suis en train de relier dans le mysqlclient Bibliothèque et the mysqlcppconn Bibliothèque. Plusieurs fois, lorsque cette question a été posée précédemment, la réponse était de relier celles-ci.
  • Certaines autres réponses historiques suggèrent que l'exemple de code source est faux et que la fonction en question doit être dans l'espace de noms SQL :: mysql, etc. Je suis sûr que le code source va bien. Encore une fois, il compile et la modification des espaces de noms dans le code source semble tout simplement aggraver.

Merci d'avance pour toute aide que vous pouvez fournir.

21
Ray in NY

J'ai donc eu ce problème pendant une semaine maintenant et je suis devenu très frustré. Je pouvais tout juste être capable de construire enfin un programme qui ne fait que si vous vous connectez à MySQL et que j'ai littéralement crié de joie. Voici ce que j'ai et j'espère que cela vous aide.

J'ai d'abord compilé la bibliothèque de connecteur C++ à partir de la source, mais après un moment, j'ai pensé peut-être quelque chose de mal, alors je suis alors utilisé pour l'utiliser avec:

Sudo apt-get install  libmysqlcppconn-dev

Et voici mon fichier source de testeur simple "testter.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;
}

Et enfin g ++ compiler la commande:

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

Cela a fonctionné pour moi et j'espère que cela vous aide à résoudre votre problème!

31
d3l

Pour moi, simplement échanger l'ordre des deux derniers arguments fixe ce problème. Je ne sais pas pourquoi mais la liaison est capable de trouver la fonction get_driver_instance Si je spécifie le -lmysqlcppconn option à la fin après le fichier source.

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

Notez également que j'ai pris les options suivantes comme je pense qu'ils sont redondants

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

Si vous êtes aussi oublieux que moi et que vous ne connaissez pas la bibliothèque dans CMAKELIST.TXT:

target_link_libraries(<target> mysqlcppconn)
6
nakajuice

Si tous les chemins sont inclus, lancez Param -i. Vous verriez s'il y a un problème si vous compilez comme ceci:

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  

le problème apparaîtra:

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

Maintenant, vous devez ajuster l'ordre de -lmysqlcppconn et main.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

C'est tout!! La raison est simple. Vous pouvez savoir utiliser le Web ou me demander d'élaborer.

2
huangxiaowei