我想尝试将我的程序(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
1条答案
按热度按时间frebpwbc1#
您遵循的步骤似乎是正确的:https://mariadb.com/resources/blog/how-to-connect-c-programs-to-mariadb
您可以尝试使用g++选项
-L
来指定mariadbcpp.so
的路径位置。从错误来看,似乎无法找到路径位置。