【背景】
编译的时候,
cmake.sudo make
or make?j4or 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/bin
ls -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/bin
ls -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