You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译MariaDB C++连接代码时无法找到libmariadbcpp库的问题

解决C++连接MariaDB的编译链接错误

问题分析

你遇到两类典型编译链接问题:

  1. 库不兼容/找不到:ld提示跳过不兼容的libmariadbcpp.so,说明系统中库的架构(32/64位)与编译环境不匹配,或库路径未被编译器识别。
  2. 未定义引用:错误地将库文件路径传给-L参数(-L要求传入目录路径而非具体.so文件),导致编译器未正确链接库。

修复步骤

1. 修正编译命令参数格式

-L后需指定库所在目录,再用-l指定库名。若你的C++连接器库位于/usr/local/lib/mariadb/,正确编译命令如下:

g++ -o code code.cpp -std=c++11 -I/usr/local/include/mariadb/conncpp/ -L/usr/local/lib/mariadb/ -lmariadbcpp -lmariadbclient

参数说明:

  • -I:指定头文件搜索目录(解决mariadb/conncpp.hpp路径问题)
  • -L:指定库文件搜索目录
  • -lmariadbcpp:链接MariaDB C++连接器库
  • -lmariadbclient:链接依赖的MariaDB C客户端库(C++连接器依赖此库)

2. 验证库架构匹配性

若仍提示“skipping incompatible”,检查系统与库的架构是否一致:

  • 查看系统架构:uname -m(x86_64为64位,i386/i686为32位)
  • 查看库架构:file /usr/local/lib/mariadb/libmariadbcpp.so
    若架构不匹配,重新编译对应架构的C++连接器。

3. 修复代码语法错误

你的代码中创建Properties对象时未赋值给变量,修改为:

sql::Properties properties({{"user", "root"}, {"password", ""}});

附:问题中的代码与错误信息

代码示例

// 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({{"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

改用-L后的错误信息

/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

内容的提问来源于stack exchange,提问作者fisherbone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:31:00