日期:2014-05-16  浏览次数:20666 次

奇怪的ld问题:/usr/bin/ld: cannot find -lmysqlclient,但是ldconfig明明可以找到libmysqlclient.so
最近一个项目,原来是在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分,谢谢。

------解决方案--------------------
export LD_LIBRARY_PATH=/usr/lib/mysql:$LD_LIBRARY_PATH
------解决方案--------------------

关注。

晚上回去研究下。
------解决方案--------------------
编译时要找到lib,要指定-L/libpath
的,   运行时 LD_LIBRARY_PATH 才会用到.  

------解决方案--------------------
ld.so.xx这个脚本的作用也是仅局限在运行时的.
编译时不箮.


------解决方案--------------------
也可以在makefile中使用 pkg-config --libs --cflags xxlib
比如
pkg-config --libs --cflags zlib
会输出

-I/usr/local/include  -L/usr/local/lib -lz