+ -
当前位置:首页 → 问答吧 → 奇怪的ld问题:/usr/bin/ld: cannot find -lmysqlclient,但是ldconfig明明可以找到libmysqlclient.so

奇怪的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分,谢谢。

作者: 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是可以的,我在之前的运行脚本里面是这么写的。

作者: 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中去找动态库,但是在运行的时候,会去找。

作者: headman   发布时间: 2011-09-06