Я хотел бы иметь возможность подключиться из моей программы на С ++ к локальному экземпляру MySQL, но следующий минимальный файл тестового файла. cpp не компилируется и возвращает неопределенные ссылки:
#include <mysqlx/xdevapi.h>
using namespace ::mysqlx;
int main()
{
printf("Hello world!\n");
return 0;
}
Я подозреваю, что не использовать правильные флаги компиляции. Когда я использую команду
c++ -o test1 -std=c++11 -lmysqlcppconn8 -I /usr/include/mysql-cppconn-8/ testfile.cpp
, я получаю следующие сообщения об ошибках (переведенные на английский язык sh):
/tmp/cc02ZbBr.o: In the function "mysqlx::abi2::r0::string::traits<char>::to_str[abi:cxx11](mysqlx::abi2::r0::string const&)":
testfile.cpp:(.text._ZN6mysqlx4abi22r06string6traitsIcE6to_strB5cxx11ERKS2_[_ZN6mysqlx4abi22r06string6traitsIcE6to_strB5cxx11ERKS2_]+0x2e): undefined reference to "mysqlx::abi2::r0::string::Impl::to_utf8[abi:cxx11](mysqlx::abi2::r0::string const&)"
/tmp/cc02ZbBr.o: In the function "mysqlx::abi2::r0::DbDoc::DbDoc()":
testfile.cpp:(.text._ZN6mysqlx4abi22r05DbDocC2Ev[_ZN6mysqlx4abi22r05DbDocC5Ev]+0x1b): undefined reference to "vtable for mysqlx::abi2::r0::DbDoc"
/tmp/cc02ZbBr.o: In the function "mysqlx::abi2::r0::DbDoc::~DbDoc()":
testfile.cpp:(.text._ZN6mysqlx4abi22r05DbDocD2Ev[_ZN6mysqlx4abi22r05DbDocD5Ev]+0xf): undefined reference to "vtable for mysqlx::abi2::r0::DbDoc"
/tmp/cc02ZbBr.o: In the function "mysqlx::abi2::r0::Value::print(std::ostream&) const":
testfile.cpp:(.text._ZNK6mysqlx4abi22r05Value5printERSo[_ZNK6mysqlx4abi22r05Value5printERSo]+0x88): undefined reference to "mysqlx::abi2::r0::common::Value::print(std::ostream&) const"
/tmp/cc02ZbBr.o:(.data.rel.ro._ZTCN6mysqlx4abi22r05ValueE0_NS1_6common5ValueE[_ZTVN6mysqlx4abi22r05ValueE]+0x18): undefined reference to "typeinfo for mysqlx::abi2::r0::common::Value"
/tmp/cc02ZbBr.o:(.data.rel.ro._ZTCN6mysqlx4abi22r05ValueE0_NS1_6common5ValueE[_ZTVN6mysqlx4abi22r05ValueE]+0x20): undefined reference to "mysqlx::abi2::r0::common::Value::print(std::ostream&) const"
/tmp/cc02ZbBr.o:(.data.rel.ro._ZTIN6mysqlx4abi22r05ValueE[_ZTIN6mysqlx4abi22r05ValueE]+0x28): undefined reference to "typeinfo for mysqlx::abi2::r0::common::Value"
collect2: error: ld returned 1 exit status
Заголовок из этого файла взят из примера кода на MySQL Connector / C ++'s Github .
Этот вопрос о SO представляется актуальным, но синтаксис / каталоги могут быть устаревшими. В любом случае, я не знаю, как приспособить ответы, приведенные там, к моей ситуации и расположению библиотек. Поэтому я прошу помощи здесь.
Дополнительная информация:
Я работаю Linux Ubuntu 18.04, MySQL версия 8.0.19 и имею следующие файлы в /usr/lib/x86_64-linux-gnu/
libmysqlcppconn.so
libmysqlcppconn.so.7.8.0.19
libmysqlcppconn.so.7
но я не знаю, как к ним обращаться.
В /usr/include/mysql-cppconn-8/
у меня есть каталоги jdbc/
, mysql/
и mysqlx/
.
Я установил следующие двоичные пакеты, используя apt менеджер пакетов: libmysqlcppconn-dev
, libmysqlcppconn7
, libmysqlcppconn8-1
и libmysqlcppconn8-2
(что, вероятно, излишне, но согласно руководству по установке необходимо установить довольно много этих библиотек).
which mysql
возвращает /usr/bin/mysql