奇怪的ld问题:/usr/bin/ld: cannot find -lmysqlclient,但是ldconfig明明可以找到libmysqlclient.so
时间:2011-09-06
来源:互联网
最近一个项目,原来是在Ubuntu 11.04上开发的,一点问题都没有,最近刚移到Fedora 15上,搭建好环境后编译,发现不能找到libmysqlclient.so,但是mysql-devel明明安装了,并且可以在/usr/lib/mysql/下发现,很奇怪。下面是一些命令的结果。
1. make之后,发现如下错误:
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld returned 1 exit status
2. 使用ldconfig看libmysqlclient.so是否加载
[rafael@localhost ~]$ sudo ldconfig -v | grep mysql
[sudo] password for rafael:
/usr/lib/mysql:
libmysqlclient.so.18 -> libmysqlclient_r.so
3. 再看/etc/ld.so.cache中是否有libmysqlclient.so
[rafael@localhost ~]$ sudo ldconfig -p | grep mysql
libmysqlclient.so.18 (libc6) => /usr/lib/mysql/libmysqlclient.so.18
libmysqlclient.so (libc6) => /usr/lib/mysql/libmysqlclient.so
以上三步结果都是正常的,但是程序就是链接不了libmysqlclient.so。
如果我在make中指定-L /usr/lib/mysql,程序可以链接libmysqlclient.so;
如果我ln -s所有的libmysqlclient.so到/usr/lib中,程序可以链接libmysqlclient.so。
所以我怀疑是不是我的ld没有去找/etc/ld.so.cache???
请大家帮我看看,凡有贡献者都有得分,一共100分,谢谢。
1. make之后,发现如下错误:
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld returned 1 exit status
2. 使用ldconfig看libmysqlclient.so是否加载
[rafael@localhost ~]$ sudo ldconfig -v | grep mysql
[sudo] password for rafael:
/usr/lib/mysql:
libmysqlclient.so.18 -> libmysqlclient_r.so
3. 再看/etc/ld.so.cache中是否有libmysqlclient.so
[rafael@localhost ~]$ sudo ldconfig -p | grep mysql
libmysqlclient.so.18 (libc6) => /usr/lib/mysql/libmysqlclient.so.18
libmysqlclient.so (libc6) => /usr/lib/mysql/libmysqlclient.so
以上三步结果都是正常的,但是程序就是链接不了libmysqlclient.so。
如果我在make中指定-L /usr/lib/mysql,程序可以链接libmysqlclient.so;
如果我ln -s所有的libmysqlclient.so到/usr/lib中,程序可以链接libmysqlclient.so。
所以我怀疑是不是我的ld没有去找/etc/ld.so.cache???
请大家帮我看看,凡有贡献者都有得分,一共100分,谢谢。
作者: headman 发布时间: 2011-09-06
export LD_LIBRARY_PATH=/usr/lib/mysql:$LD_LIBRARY_PATH
作者: zmlovelx 发布时间: 2011-09-06
hi, zmlovelx
我想搞清楚的是,为什么用g++编译时,不能link已经在/etc/ld.so.cache中的so的问题。
export LD_LIBRARY_PATH=/usr/lib/mysql:$LD_LIBRARY_PATH是可以的,我在之前的运行脚本里面是这么写的。
我想搞清楚的是,为什么用g++编译时,不能link已经在/etc/ld.so.cache中的so的问题。
export LD_LIBRARY_PATH=/usr/lib/mysql:$LD_LIBRARY_PATH是可以的,我在之前的运行脚本里面是这么写的。
作者: headman 发布时间: 2011-09-06
另外,export LD_LIBRARY_PATH=/usr/lib/mysql:$LD_LIBRARY_PATH在编译是不可用,还是找不到libmysqlclient,只是在运行时,可用。
作者: headman 发布时间: 2011-09-06

关注。
晚上回去研究下。
作者: feiyinzilgd 发布时间: 2011-09-06
如果我ln -s所有的libmysqlclient.so到/usr/lib中,程序可以链接libmysqlclient.so,编译成功之后,我把/usr/lib中的所有libmysqlclient.so的东西都删除,我的程序可以执行。
所以,结果表明,是在编译的时候,g++在ld的时候没有去/etc/ld.so.cache中去找动态库,但是在运行的时候,会去找。
所以,结果表明,是在编译的时候,g++在ld的时候没有去/etc/ld.so.cache中去找动态库,但是在运行的时候,会去找。
作者: headman 发布时间: 2011-09-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28