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

Linux下MySQL C++连接器编译报错及段错误问题求助

解决MySQL C++ Connector编译undefined reference to 'get_driver_instance'错误

我刚碰到过几乎一模一样的问题,这是典型的链接阶段找不到MySQL C++库符号的问题,咱们一步步来搞定:

错误原因拆解

  • undefined reference:链接器ld找不到get_driver_instance()的实现,这个函数属于MySQL C++ Connector的核心库,编译时必须明确告诉编译器要链接这个库。
  • 不调用该函数就触发段错误:因为sql::Driver *driver是未初始化的野指针,直接调用driver->connect()会访问非法内存,必然崩溃。

具体解决步骤

1. 先找到你的MySQL C++ Connector库文件

先确认系统里已经安装了对应的库,用命令搜索:

find / -name "libmysqlcppconn*" 2>/dev/null

通常会得到类似结果:

/usr/lib/libmysqlcppconn.so
/usr/local/mysql/lib/libmysqlcppconn.a

记住这个路径,后面要用到。

2. 编译时添加链接选项

用g++编译代码时,必须加上-lmysqlcppconn来链接库,如果库不在系统默认的搜索路径(比如/usr/lib),还要用-L指定库所在目录。

基础编译命令(库在默认路径):

g++ test.cpp -o test -lmysqlcppconn

库在非默认路径的情况(比如/usr/local/mysql/lib):

g++ test.cpp -o test -L/usr/local/mysql/lib -lmysqlcppconn

如果编译时还提示找不到头文件(比如mysql_connection.h),需要用-I指定头文件目录:

g++ test.cpp -o test -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlcppconn

3. 解决运行时动态库找不到的问题

如果编译成功,但运行时提示error while loading shared libraries: libmysqlcppconn.so.8: cannot open shared object file: No such file or directory,需要把库路径加入动态库搜索路径:

  • 临时生效(仅当前终端):
export LD_LIBRARY_PATH=/path/to/your/mysqlcppconn/lib:$LD_LIBRARY_PATH
  • 永久生效(重启后依然有效):
    编辑/etc/ld.so.conf,添加一行库路径(比如/usr/local/mysql/lib),然后执行:
sudo ldconfig

4. 可选:指定命名空间调用函数

部分版本的Connector中,get_driver_instance()需要明确指定mysql子命名空间,修改代码中的对应行:

driver = sql::mysql::get_driver_instance();

这样可以避免潜在的命名冲突问题。


验证

编译运行后应该能正常输出:

Running Hello World!
	... MySQL replies: Hello World!
	... MySQL says it again: Hello World!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:26:53