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
相关产品推荐
相关产品推荐

