linux下编译应用程序常常会出现如下错误:
/usr/bin/ld: cannot find -lxxxx
意思是编译过程找不到对应库文件。其中,-lxxxx表示链接库文件 libxxxx.so。有时候,由于库文件是编译过程临时生成的,如果前面出错也会导致出现这种情况,下面针对的是由于本机系统环境缺失而引起的。
出现原因
一般出现这种错误有以下几种原因:
- 系统缺乏相应的库文件或者版本对应不上。
- 库文件的链接错误。
- 库文件路径设置问题。
如何判断
-
确认库或者对应版本是否存在,例如-lstdc++:(1)查看/usr/lib; /usr/lib64; /usr/local/lib; /usr/local/lib64等;或者(2)gcc -lstdc++。
-
链接错误:查看库所在文件夹/usr/lib; /usr/lib64; /usr/local/lib; /usr/local/lib64等在的内相关链接是否存在错误。
-
库文件路径设置:查看/etc/ld.so.conf和/etc/ld.so.conf.d/中是否有相关库文件所在的路径设置。
如何解决
- 第一种情况,可以通过下载安装lib来解决,red-hat大多数可以直接通过yum来安装:
yum search libstdc++
yum install libstdc++
- 第二种情况,如果存在错误,可以建立链接ln -s libstdc++.so.6 libstdc++.so。
- 第三种情况,在/etc/ld.so.conf中添加,或者在/etc/ld.so.conf.d/中任意一个conf中加入库所在路径,或者自己在其中建立对应名称的conf添加路径,以方便查找。
注意:在添加了库文件路径后需要重建ld.so.cache,必须运行ldconfig,特别是编译安装的软件。
版权声明:本文为博主原创文章,未经博主允许不得转载。