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:
Merci d'avance pour toute aide que vous pouvez fournir.
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!
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
Si vous êtes aussi oublieux que moi et que vous ne connaissez pas la bibliothèque dans CMAKELIST.TXT:
target_link_libraries(<target> mysqlcppconn)
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.