MySQL Connector中mysqlx函数未定义引用问题求助
解决MySQL C++ Connector编译时的未定义引用问题
你遇到的undefined reference错误是典型的链接阶段缺失MySQL C++ Connector库文件导致的——编译器已经能找到头文件(你通过-I /usr/include/mysql-cppconn-8指定了路径),但链接器找不到实现mysqlx::abi2::r0::string::Impl::to_utf8这些函数的二进制库。
核心问题:缺少库链接参数
MySQL C++ Connector 8.x版本对应的核心库是mysqlcppconn8(旧版本可能是mysqlcppconn),你需要在编译命令中添加链接该库的参数,同时确保库文件的路径被链接器识别。
步骤1:确认库文件位置
首先找到库文件的实际路径,你可以用这个命令查找:
find /usr -name "libmysqlcppconn8.so"
常见的位置包括:
/usr/lib/usr/local/lib/usr/local/mysql-connector-c++-8.x/lib64(自定义安装时的路径)
步骤2:修改编译命令
在你的原有命令基础上,添加:
-L <库文件所在目录>:如果库不在系统默认链接路径,需要指定这个参数-lmysqlcppconn8:告诉链接器要链接的库名(注意lib前缀和.so后缀要省略,链接器会自动补全)
修改后的完整编译命令示例(假设库在/usr/local/mysql-connector-c++-8.0/lib64):
g++ -I /usr/local/boost_1_70_0 -L /usr/local/boost_1_70_0 -I /usr/include/mysql-cppconn-8 -L /usr/local/mysql-connector-c++-8.0/lib64 -pthread -std=c++2a `pkg-config gtkmm-3.0 --cflags --libs` -lmysqlcppconn8 srv.cpp -o srv
如果库在系统默认路径(比如/usr/lib),可以省略-L参数,直接加-lmysqlcppconn8即可。
注意事项
- 如果你用的是MySQL C++ Connector 7.x或更早版本,把
-lmysqlcppconn8换成-lmysqlcppconn即可 - 确保
-l参数放在编译命令的后面(链接器需要先看到源文件,再知道要链接哪些库)
内容的提问来源于stack exchange,提问作者Pelle
相关产品推荐
相关产品推荐

