MariaDB C++/连接器:尝试生成项目,但它没有检测到我的mariadbcpp库

yebdmbv4  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(169)

我想尝试将我的程序(C++代码)连接到MariaDB,但在执行此命令运行代码时,它却抛出错误消息,称无法找到我的mariadbcpp库:

命令g++ -o code code.cpp -std=c++11 -lmariadbcpp
代码示例

// Includes
#include <iostream>
#include <mariadb/conncpp.hpp>

// Main Process
int main(int argc, char **argv)
{
   try {
      // Instantiate Driver
      sql::Driver* driver = sql::mariadb::get_driver_instance();

      // Configure Connection, including initial database name "test":
      sql::SQLString url("jdbc:mariadb://localhost:3306/test");

      // Use a properties map for the other connection options
      sql::Properties properties({{"user", "root"}, {"password", ""}});

      // Establish Connection
      // Use a smart pointer for extra safety
      std::unique_ptr<sql::Connection> conn(driver->connect(url, properties));
 
      // Use Connection
      // ...

      // Close Connection
      conn->close();
   }

   // Catch Exceptions
   catch (sql::SQLException& e) {
      std::cerr << "Error Connecting to the database: "
         << e.what() << std::endl;

      // Exit (Failed)
      return 1;
   }

   // Exit (Success)
   return 0;
}

错误

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /lib/../lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /usr/lib/../lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/../../../libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /usr/lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: cannot find -lmariadbcpp: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /lib/../lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /usr/lib/../lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/../../../libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /lib/libmariadbcpp.so when searching for -lmariadbcpp
/usr/bin/ld: skipping incompatible /usr/lib/libmariadbcpp.so when searching for -lmariadbcpp
collect2: error: ld returned 1 exit status

我已经安装了MariaDB社区服务器,MariaDB C/连接器和MariaDB C++/连接器基于各自的文档。

MariaDB社区服务器:https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04
**玛丽亚数据库C/连接器:**https:mariadb.com/docs/skysql/connect/programming-languages/c/install/#CS_Package_Repository
**MariaDB C++/连接器:**https://mariadb.com/docs/skysql/连接/编程语言/cpp/安装/#Linux安装(二进制文件)

我已经按照GitHub指令here重新构建了MariaDB C++/连接器。
它确实修复了兼容性问题,但/usr/bin/ld: cannot find -lmariadbcpp: No such file or directory错误仍然存在。
我也已经用-L标志运行了这个程序。这个命令是g++ -o code code.cpp -std=c++11 -L/usr/local/lib/mariadb/libmariadbcpp.so,但是它给了我一堆未定义的错误。
错误:

/usr/bin/ld: /tmp/ccblDiuQ.o: in function `main':
code.cpp:(.text+0x31): undefined reference to `sql::mariadb::get_driver_instance()'
/usr/bin/ld: code.cpp:(.text+0x51): undefined reference to `sql::SQLString::SQLString(char const*)'
/usr/bin/ld: code.cpp:(.text+0x194): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: code.cpp:(.text+0x23c): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: /tmp/ccblDiuQ.o: in function `std::pair<sql::SQLString const, sql::SQLString>::~pair()':
code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_ED2Ev[_ZNSt4pairIKN3sql9SQLStringES1_ED5Ev]+0x1c): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_ED2Ev[_ZNSt4pairIKN3sql9SQLStringES1_ED5Ev]+0x28): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: /tmp/ccblDiuQ.o: in function `std::pair<sql::SQLString const, sql::SQLString>::pair<char const (&) [5], char const (&) [11], true>(char const (&) [5], char const (&) [11])':
code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC1IRA5_KcRA11_S5_Lb1EEEOT_OT0_[_ZNSt4pairIKN3sql9SQLStringES1_EC1IRA5_KcRA11_S5_Lb1EEEOT_OT0_]+0x30): undefined reference to `sql::SQLString::SQLString(char const*)'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC1IRA5_KcRA11_S5_Lb1EEEOT_OT0_[_ZNSt4pairIKN3sql9SQLStringES1_EC1IRA5_KcRA11_S5_Lb1EEEOT_OT0_]+0x4f): undefined reference to `sql::SQLString::SQLString(char const*)'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC1IRA5_KcRA11_S5_Lb1EEEOT_OT0_[_ZNSt4pairIKN3sql9SQLStringES1_EC1IRA5_KcRA11_S5_Lb1EEEOT_OT0_]+0x64): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: /tmp/ccblDiuQ.o: in function `std::pair<sql::SQLString const, sql::SQLString>::pair<char const (&) [9], char const (&) [9], true>(char const (&) [9], char const (&) [9])':
code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC1IRA9_KcS7_Lb1EEEOT_OT0_[_ZNSt4pairIKN3sql9SQLStringES1_EC1IRA9_KcS7_Lb1EEEOT_OT0_]+0x30): undefined reference to `sql::SQLString::SQLString(char const*)'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC1IRA9_KcS7_Lb1EEEOT_OT0_[_ZNSt4pairIKN3sql9SQLStringES1_EC1IRA9_KcS7_Lb1EEEOT_OT0_]+0x4f): undefined reference to `sql::SQLString::SQLString(char const*)'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC1IRA9_KcS7_Lb1EEEOT_OT0_[_ZNSt4pairIKN3sql9SQLStringES1_EC1IRA9_KcS7_Lb1EEEOT_OT0_]+0x64): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: /tmp/ccblDiuQ.o: in function `std::less<sql::SQLString>::operator()(sql::SQLString const&, sql::SQLString const&) const':
code.cpp:(.text._ZNKSt4lessIN3sql9SQLStringEEclERKS1_S4_[_ZNKSt4lessIN3sql9SQLStringEEclERKS1_S4_]+0x27): undefined reference to `sql::SQLString::operator<(sql::SQLString const&) const'
/usr/bin/ld: /tmp/ccblDiuQ.o: in function `std::pair<sql::SQLString const, sql::SQLString>::pair(std::pair<sql::SQLString const, sql::SQLString> const&)':
code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC2ERKS3_[_ZNSt4pairIKN3sql9SQLStringES1_EC5ERKS3_]+0x24): undefined reference to `sql::SQLString::SQLString(sql::SQLString const&)'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC2ERKS3_[_ZNSt4pairIKN3sql9SQLStringES1_EC5ERKS3_]+0x3f): undefined reference to `sql::SQLString::SQLString(sql::SQLString const&)'
/usr/bin/ld: code.cpp:(.text._ZNSt4pairIKN3sql9SQLStringES1_EC2ERKS3_[_ZNSt4pairIKN3sql9SQLStringES1_EC5ERKS3_]+0x54): undefined reference to `sql::SQLString::~SQLString()'
/usr/bin/ld: /tmp/ccblDiuQ.o:(.data.rel.local.DW.ref._ZTIN3sql12SQLExceptionE[DW.ref._ZTIN3sql12SQLExceptionE]+0x0): undefined reference to `typeinfo for sql::SQLException'
collect2: error: ld returned 1 exit status
frebpwbc

frebpwbc1#

您遵循的步骤似乎是正确的:https://mariadb.com/resources/blog/how-to-connect-c-programs-to-mariadb
您可以尝试使用g++选项-L来指定mariadbcpp.so的路径位置。从错误来看,似乎无法找到路径位置。

相关问题