您的位置:首页 > 运维架构 > Linux

Linux: /usr/bin/ld: cannot find -lc Error and Solution

2011-11-03 17:08 525 查看
         这个简单的问题折腾我近2个小时的时间,下载新gcc,libc,再编译Libc时一路曲折,居然说ld older。我郁闷的不行       

        其实早就想到是Libc.so的路径问题,但是自己当时把找到usr/lib/i386-linux-gnu/
libc.so 和 libc.a,复制 /usr/local/lib/目录中,发现还是不行,当时认为跟这个路径无关了,结果应该将这个拷贝到/usr/lib/目录中,主要是因为 /etc/ld.so.conf.d/libc.conf这个配置文件忽悠了我,让我误认为Libc的路径就是 /usr/local/lib/,结果就坑爹了~

 
   下面将介绍LIB的搜索机制~

 
   1./etc/ld.so.conf.d

 
   这个LIB搜索的配置文件,你发现这里面内容是include /etc/ld.so.conf.d/*.conf,因此如果需要添加PATH,可以在ld.so.conf.d/*.conf或者etc/ld.so.conf.d中任何一个配置文件中加入路径字符串,如i686-linux-gnu.conf中配置

/lib/i386-linux-gnu/usr

/lib/i386-linux-gnu

/lib/i686-linux-gnu

/usr/lib/i686-linux-gnu
/home/t~n/linux/fork


其中home/~linux/fork目录是自己添加的,在fork目录中编译一个.so库,再编译一个引用该库的main,经测试,可以搜索到Lib.

注意再修改这个配置文件后,需要执行ldconfig来重新配置系统的搜索路径!

 2.LD_LIBRARY_PATH 

  使用export LD_LIBRARY_PATH=path来指定搜索LIB,这种方式也是可以实现。

3.在编译时就指定LIB的搜索路径

1.编译目标代码时指定的动态库搜索路径; 

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径; 

4.默认的动态库搜索路径/lib; 

5.默认的动态库搜索路径/usr/lib。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息