目录
一、前言
Linux下编译程序的时候,出现/usr/bin/ld: cannot find -lxxx的错误,主要的原因是找不到相应的动态库,库文件没有导入到ld检索目录中。
常见的链接不到动态库的错误信息如下:
/usr/bin/ld: cannot find -lxcb
/usr/bin/ld: cannot find -lfreetype
/usr/bin/ld: cannot find -lpng
/usr/bin/ld: cannot find -lEGL
/usr/bin/ld: cannot find -lGL
…
动态库的名称就是-l后面的名称,如-lpng,就是png动态库。
二、解决方法
1、查看本地是否存在这些库。
命令行输入
locate libfreetype.so如果本地存在该库,则输出
/usr/lib/x86_64-linux-gnu/libfreetype.so.6
/usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1如果本地不存在该库,则必须要安装才能解决,根据情况再进行配置
2、创建软链接。
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1 /usr/lib/x86_64-linux-gnu/libfreetype.so
3、重新编译程序,库文件找不到的问题应该可以解决了,其他库找不到的问题同上处理即可。需要注意的是,某些库可能有不一样的情况,如下:
-lpng
命令行输入 locate libpng.so ,可能查找不到对应的库
可以换一种方式查找,如 find / -name libpng*
只要查找到相应的库,创建软链接即可,如
ln -s /usr/lib/x86_64-linux-gnu/libpng12.so /usr/lib/x86_64-linux-gnu/libpng.so
直接新建软链接指向已存在的png库软链接-lEGL 和 -lGL
命令行输入 locate libEGL.so
输出
/usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so.1
/usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so.1.0.0
创建软链接
ln -s /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so.1.0.0 /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so
把软链接创建在这个目录下可能不生效,编译程序的时候依然出错
此时,在上一级目录中再创建一个软链接,即可生效
ln -s /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so.1.0.0 /usr/lib/x86_64-linux-gnu/libEGL.so-lGL 处理方法与 -lEGL 一致
4、如果库文件已存在或已安装,并且相应的软链接也已存在或已创建,依旧出现错误,则证明库文件没有导入到ld检索目录中,有以下两种处理方法。
(1)第一种方法
直接将库文件和拷贝放到/usr/lib/x86_64-linux-gnu/目录中,然后重新创建软链接即可。(2)第二种方法
进入/etc/ld.so.conf.d/目录,查看库文件的安装存放的路径是否有配置到.conf文件中。如果没有,可以在其中一个.conf文件中添加库文件的路径(不建议,系统配置好的文件最好不要修改);另外可以自己新建一个.conf文件,如:ffmpeg.conf,然后在文件中输入对应的库文件的路径,如:/home/ffmpeg/lib,该路径必须要写到库文件存放的最内层目录,最后保存文件即可。注意,还有一步不能忘,在命令行输入ldconfig,回车运行,让刚刚的配置信息立即生效,配置完成。
版权归原作者 叶落花枯 所有, 如有侵权,请联系我们删除。