Да, этот вопрос уже задавался … Я перепробовал все, что упоминалось в предыдущих ответах. Моя настройка действительно проста, так что это не должно быть так сложно.
Я просто хочу программировать против MySQL, используя C ++. Мой исходный код взята дословно из примера типа «привет мир» здесь:
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'
Несколько деталей:
Заранее благодарю за любую помощь, которую вы можете оказать.
Таким образом, у меня уже была эта проблема в течение недели, и я также был очень расстроен этим. Я только сейчас смог наконец создать программу, которая ничего не делает, кроме входа в 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
Это сработало для меня, и я надеюсь, что это поможет вам решить вашу проблему!
Для меня просто поменяв местами порядок последних двух аргументов, я решил эту проблему. Я не знаю почему, но компоновщик может найти функцию 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
Если вы так же забывчивы, как и я, и не связали библиотеку в CMakeLists.txt:
target_link_libraries(<target> mysqlcppconn)
Если все пути включены, выведите параметр -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
Теперь вы должны настроить порядок -lmysqlcppconn
а также 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
Это все!!
Причина проста. Вы можете узнать с помощью Интернета или попросить меня уточнить.