与MySQL客户端库的链接问题

当你链接到应用程序以使用MySQL客户端库时,可能会遇到以mysql_开始的未定义引用错误,如下所示:

/tmp/ccFKsdPa.o: 在函数`main'中:
/tmp/ccFKsdPa.o(.text+0xb): 对`mysql_init'的未定义引用。
/tmp/ccFKsdPa.o(.text+0x31): 对`mysql_real_connect'的未定义引用。
/tmp/ccFKsdPa.o(.text+0x57): 对`mysql_real_connect'的未定义引用。
/tmp/ccFKsdPa.o(.text+0x69): 对`mysql_error'的未定义引用。
/tmp/ccFKsdPa.o(.text+0x9a): 对`mysql_close'的未定义引用。

通过在链接命令后增加“-Ldir_path -lmysqlclient”选项,应能解决该问题,其中,dir_path代表客户端库所在目录的路径名。要想确定正确的目录,可尝试下述命令:

shell> mysql_config --libs

来自mysql_config的输出可能会指明应在链接命令上指定的其他库。

对于非压缩或压缩函数,如果遇到未定义引用错误,可在链接命令后添加-lz,并再次尝试。

对于应在系统上存在的函数(如connect),如果遇到未定义引用错误,请检查相关函数的手册页,以便确定应在链接命令上增加哪些库。

对于系统上不存在的函数,可能会遇到未定义引用错误,如下所示:

mf_format.o(.text+0x201): 对`__lxstat'的未定义引用。

它通常意味着你的MySQL客户端库是在与你的系统不100%兼容的系统上编译的。在该情况下,应下载最新的MySQL源码分发版,并自己编译MySQL。

当你试图执行MySQL程序时,可能会遇到运行时未定义引用错误。如果这类错误指明了以mysql_开始的符号,或指明未发现mysqlclient库,这意味着你的系统无法找到共享的libmysqlclient.so库。对其的更正方式是,通知系统在库所在位置搜索共享库。请使用与系统相适应的下述方法:

·将libmysqlclient.so所在目录的路径添加到LD_LIBRARY_PATH环境变量中。

·将libmysqlclient.so所在目录的路径添加到LD_LIBRARY环境变量中。

·将libmysqlclient.so拷贝到可被系统搜索的目录下,如/lib,然后通过执行ldconfig更新共享库信息。

解决该问题的另一种方法是,以静态方式将你的程序与“-static”选项链接在一起,或在链接代码之前删除动态MySQL库。使用第2种方法之前,应确保没有使用动态库的其它程序。

时间: 2024-08-28 07:56:47

与MySQL客户端库的链接问题的相关文章

【原创】modb 功能设计之“支持部分MySQL客户端协议”-2

首先看看有哪些资源:1. MySQL 官网 [MySQL Connectors]->[Connector/C (libmysqlclient)] Connector/C (libmysqlclient) is a client library for C development. 官网对 MySQL Connector/C 的完整文档描 述参考 这里 . 重点内容摘录翻译如下 === [22.5. MySQL Connector/C]       MySQL Connector/C 是一个客户端

Mysql客户端不支持鉴定协议的解决方法

MySQL 5.1采用了基于密码混编算法的鉴定协议,它与早期客户端(4.1之前)使用的协议不兼容.如 果你将服务器升级到4.1之上,用早期的客户端进行连接可能失败,并给出下述消息: shell> mysql 客户端不支持服务器请求的鉴定协议:请考虑升级MySQL客户端. 要想解决该问题,应使用下述方法之一: ·升级所有的客户端程序,以使用4.1.1或更新的客户端库. ·用4.1版之前的客户端连接到服务器时,请使用仍具有4.1版之前风格密码的账户. ·对于需要使用4.1版之前的客户端的每位用户,将

ubuntu-阿里云下 Tomcat 应用无法连接数Mysql据库

问题描述 阿里云下 Tomcat 应用无法连接数Mysql据库 1.程序没问题,在本机上调试无误,struts2 spting hibernate 2.在阿里云服务器上 配置了 JDK 1.7 + tomcat7 + mysql5.1 , OS:ubuntu64 3.将应用部署后,JSP 页面访问正常,只要涉及到连接数据库就会有如下提示 org.hibernate.exception.GenericJDBCException: Cannot open connection org.hiberna

MySql跨库视图问题

问题描述 有数据库databaseA,databaseB, 在databaseA中有张表tabA, 由于在项目中数据连接的权限问题,在J2EE项目中databaseB不能直接通过databaseA.tabA来访问tabA,需要在databaseB建跨库视图 viewA: select * from databaseA.tabA奇怪的问题发生了,用MySql客户端来访问viewA 都没有问题, 但是如果在J2EE项目中访问viewA就会抛出异常, databaseA.viewA 表或视图不存在,

LVS+Keepalived实现MySQL从库读操作负载均衡

说明: 操作系统:CentOS 5.X 64位 MySQL主服务器:192.168.21.126 MySQL从服务器:192.168.21.127,192.168.21.128 MySQL主从同步的数据库为:osyunweidb 实现目的: 增加两台服务器(主备),通过LVS+Keepalived实现MySQL从库读操作负载均衡 架构规划: 操作系统:CentOS 5.X 64位 LVS主服务器:192.168.21.129 LVS备服务器:192.168.21.130 LVS虚拟服务器(VIP

逐步分析MySQL从库com_insert无变化的原因_Mysql

大家都知道com_insert等com_xxx参数可以用来监控数据库实例的访问量,也就是我们常说的QPS.并且基于MySQL的复制原理,所有主库执行的操作都会在从库重放一遍保证数据一致,那么主库的com_insert和从库的com_insert理论上应该是相等的.如下面显示,第二列代表主库,第三列代表从库: 复制代码 代码如下: com_select              22                 1138com_update              36           

Yelp开源数据管道项目最新组件——数据管道客户端库

2016年底,Yelp开源了他们基于Python和Apache Kafka的数据管道客户端库.该库提供了一个发布和消费数据管道主题的接口.之前的讨论涉及Yelp的数据管道组件以及分布式服务数据集成所面临的挑战,也就是N+1问题和梅特卡夫定律. 客户端库只是最新发布的一个Yelp数据管道组件.对于创建Yelp数据管道的动机和原因,据Yelp报道,切换到新的数据管道每年为他们节省了1000万美元.Yelp工程副总裁Jason Fennel表示: 我们的动力产生于我们考察自己的数据仓库时.我们将所有的

从MySQL全库备份中恢复某个库和某张表

从MySQL全库备份中恢复某个库和某张表 在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-data=2 >dump.sql 只还原erp库的内容 [root@HE1 ~]# mysql -uroot -pMANAGER erp --one-database <dump.sql </dump.sql<> 可以看出这里主要用到的参数

MySQL客户端命令行应用技巧

图像化导向的MySQL管理工具比比皆是,但真正能够提速而且并非"图有其表"的管理工具,可能没有 哪一个比得上MySQL客户端驱动的命令行更有效了.不过,执行一般查询需要大量键盘输入工作,而且确 定您目前正在登录的数据库以及快速监测数据库服务器的性能都会变得很单调乏味. 改变客户端提示符 如果每运行一次show tables来提醒自己目前所选择的是哪个数据库就能得到一块钱的话,估计现在我 都成百万富翁了.事实上,当我们不停的定期在IDE.shell提示符和MySQL客户端提示符之间切换的