Linux No rule to make target OR cannot find -l

来源:互联网 发布:数据库blob什么意思 编辑:程序博客网 时间:2024/05/16 08:28

【背景】
编译的时候,
cmake.sudo make
or makej4or make -j8
【问题描述】
报错:
No rule to make target ‘/usr/bin/libSM.so’
or
cannot find -l/usr/lib/i386-linux-gnu/libSM.so
【问题解决】
笔者猜测这种情况,绝大部分都是因为 软连接出了问题,需要重新建立软连接。

进入/usr/bin文件夹,查询libSM.so指向哪里

cd /usr/binls -l libSM.so

定位源文件位置,打印出如下两个:
/usr/lib/libSM.so
/usr/lib/i386-linux-gnu/libSM.so
/usr/lib/i386-linux-gnu/libSM.so.6
/usr/lib/i386-linux-gnu/libSM.so.6.0.1
这是指向了过多的源文件,需要指向错误提示的源文件。

备份

$sudo mv /usr/bin/libSM.so /usr/bin/libSM_bk.so 

重新建立连接

$sudo ln -s /usr/lib/i386-linux-gnu/libSM.so /usr/bin/
  // 重新建立一个软连接

再次用 ls 查看/usr/bin/libSM.so,发现已经不提示错误了; 用ls -l命令会显示软连接信息:

cd /usr/binls -l /usr/lib/libSM.so

We will get THIS:

/usr/lib/libSM.so -> /usr/lib/i386-linux-gnu/libSM.so

libSM.so结果呈现蓝绿色—-成功~

:这类问题都差不多,都是* .so文件**针对bin文件夹中的索引不太对,修改软连接不失为一种非常有效的方法,类似的报错都可以用这种方法修复——cannot find类的以及No rule to…类的。
但是此外也可以修改Makefile文件:
如*.h文件的报错:

make: *** No rule to make target `e:/Tornado2.2_Project/FTTB/utils/h/nos/nos_cli.h', neede d by `onu07_snmp_cli.o'.  Stop. 

就可能是makefile里面的文件依赖问题,以至于头文件找不到。
就可能是因为:
工程所在的目录改变,例如原来在C盘,现在移到了D盘,而makefile里面的.h文件路径没有改变。
如果读者有本事的话:可以打开makefile文件,找到*.o文件的依赖关系,找到*.h文件的路径,检查路径是否出错。
【参考文章】
http://answers.opencv.org/question/41575/no-rule-to-make-target-usrliblibnvcuvidso-needed-by-liblibopencv_gpuso2/
http://blog.sina.com.cn/s/blog_6e00b3310101fh01.html

原创粉丝点击