[Linux]编译报错:"/usr/bin/ld: cannot find -lxxx" 解决方法总结

在Linux下编译代码,或多或少会遇到链接错误,其中''/usr/bin/ld: cannot find -lxxx''算是比较常见的,这里根据自己遇到的问题和网上查找的资料整理下该问题的解决方法,供自己遗忘时翻阅,也希望能帮助其它网友

  • 未安装对应xxx库
    • 在使用源码安装一些工具时,很可能遇到"cannot find lxxx"问题,多半原因是自己主机中没有安装指定的库.
    • 解决方法:安装xxx库(自己没有,那就装一个).
    • 安装方法:
      • ① 使用软件管理工具安装,在软件源可用的情况下,推荐使用这种方法安装工具,如debian或Ubuntu,使用命令 apt-get install xxx-dev(xxx-dev为安装包的名称,对于不同的库可能库名称格式不一样,需要根据具体情况确定;不同的linux发行版使用的包管理命令不同,如redhat或centOS 使用yum管理包) [Linux]编译报错: Ubuntu apt-get安装
      • ② 继续使用源码安装缺失的库,这种方法会导致为了安装A工具,进而要安装B库;而为了安装B库,需要安装C库.....总之,源码安装需要把依赖库全都安装好('好'-->有且版本正确),有时候部分库需要跨过'长城'找
  • pthread相关
    • 编译多线程程序时,在代码中引入pthread.h是不够的,需要添加gcc命令参数 -lpthread
  • 库文件名称错误(或者库文件未按照linux规范命名导致ld失败)
    • 有时候连接报错的库其实在主机中存在,但是gcc编译时仍cannot find,这是由于gcc没有找到它.没有找到的原因,可能如下:
      • ① 文件名称不符合规定,导致linker找不到.在linux下,库文件一般以'lib'+'库名称'+'扩展名'格式命名的,如libjpeg.so(动态库)或libpython2.7.a(静态库),若代码中所要连接的库,在主机中名称不符合这个格式,连接器会找不到的,所以需要试试改下库名称试试
      • ② 需要连接的库所在路径错误(或库文件路径不在ld默认列表中),连接器在进行连接时,会在特定的目录里面查找库文件,如Ubuntu默认在/etc/ld.so.conf中指定的conf目录查找,解决此问题可从两个方向处理:
        • a,将需要连接的库文件加到/etc/ld.so.conf的目录中(一般需要root权限),然后执行ldconfig命令(root权限) [Linux]编译报错: ld.so.conf
        • b,添加编译参数,指定连接时查找库文件的目录,命令为-L/your/lib/path,如-L/home/abc/tools/lib/,这样连接器就会把/home/abc/tools/lib加到查找目录中

暂时先写这些吧,在遇到其它情况时,再补充.若文中存在不妥的地方,欢迎大家指摘

你可能感兴趣的:(linux,编译问题,Linux,make,编译报错,ld,cannot,find)