Да, этот вопрос задавался раньше ... Я перепробовал все, что упоминалось в предыдущих ответах. Моя установка действительно проста, так что это не должно быть так сложно.
Я просто хочу программировать против mysql, используя C ++. Мой исходный код взят из примера типа '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 и т. Д. Я почти уверен, что исходный код в порядке. Опять же, он компилируется, и изменение пространств имен в исходном коде только ухудшает ситуацию.
Заранее благодарим вас за любую помощь, которую вы можете оказать.
-l:libmysqlclient_r.so.18
? Разве это не должно быть-lmysqlclient_r
? - person Alexander Shukaev   schedule 14.04.2013firsttry.cpp
вfirsttry.o
, а затем скомпилировать его с этими библиотеками MySQL в исполняемый файл. Т.е. вот так:g++ -Wall -I/usr/include/mysqlcppconn -I/usr/local/boost_1_53_0 -o firsttry.o firsttry.cpp
иg++ firsttry.o -L/usr/lib/x86_64-linux-gnu -l:libmysqlclient_r.so.18 -L/usr/lib/mysqlcppconn -lmysqlcppconn -o firsttry
. - person Alexander Shukaev   schedule 14.04.2013/usr/lib/mysqlcppconn/libmysqlcppconn.so: undefined reference to mysql_stmt_execute@libmysqlclient_18'
и так далее, все неопределенные ссылки в libmysqlcppconn ... почему это было бы? - person Ray in NY   schedule 14.04.2013-lmysqlcppconn -l:libmysqlclient_r.so.18
. - person Alexander Shukaev   schedule 14.04.2013-lmysqlcppconn-static
вместо-lmysqlcppconn
Это удовлетворяет мои непосредственные потребности, но мне все еще очень любопытно, почему динамическая версия не работает, я чувствую, что есть что-то фундаментальное, что я должен отсутствовать ... - person Ray in NY   schedule 14.04.2013get_driver_instance
присутствует в динамической версии, т.е. действительно ли он экспортирует этот символ? Вы можете сделать это, запустивnm libmysqlcppconn.so
- person Alexander Shukaev   schedule 14.04.2013g++ firsttry.cpp -I/opt/local/include/mysql5-connector-cpp/driver -I/opt/local/include/mysql5-connector-cpp -L/opt/local/lib/mysql5-connector-cpp -lmysqlcppconn
... если я опущу-lmysqlcppconn
, я получаю предупреждение с неопределенным символом, аналогичное тому, о котором написано здесь. Возможно, посмотрите, находятся ли ваша статическая и динамическая библиотеки в одном каталоге. - person John Zwinck   schedule 14.04.2013