OpenWRT下libv4l的编译问题(uClibc++、stdc++相关)

最近研究路由器上的摄像头监控,要用到libv4l2的库,结果用OpenWRT SDK编译时却遇到了问题,路由器cpu是MT7620A,用的SDK是OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2,用./scripts/feeds安装了libv4l后,直接make报错:

In file included from v4l2-compliance.cpp:37:0:
v4l2-compliance.h:25:18: fatal error: cerrno: No such file or directory
 #include <cerrno>

看了下,是c++写法下的errno头文件找不到,V=s看了详细日志,-I的头文件搜索路径里确实没有cerrno,但是这个文件确实存在于这里:staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include/uClibc++/,也就是说-I少了个带uClibc++的路径,看了半天sdk里的各种.mk,也没找到什么配置参数方面的玄机,可又不想傻加上个-I,或者都改成errno.h,于是开始搜索…

很快就找到了类似的问题,什么iostream找不到,vector找不到之类的,大致来说就是这个uClibc++版的标准库导致的,也不知为何就没有把那一级子路径自动加入到-I里,于是又按照网上有人提到的方法,不用uClibc++而改用标准的stdc++,心想反正我只是要本地有个libv4l2的include和lib,到时候设备上可以直接opkg安装prebuilt的lib,于是照方抓药,删掉了

include $(INCLUDE_DIR)/uclibc++.mk

,这一行,结果再make时编译是不报错了,可最后出package的时候报了个这个:

Package v4l-utils is missing dependencies for the following libraries:
libstdc++.so.6

小搜一下,找到了这个:http://blog.csdn.net/li6727975/article/details/45971157,按这篇文章的方法,编辑了下staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/pkginfo/libc.provides文件的内容,加上了libstdc++.so.6后,make果然可以成功了。
但想了下总觉得有哪里不对劲,又搜索了下找到了这里:http://www.cnblogs.com/bunchen/p/4060034.html,看来修改libc.provides的方法不妥,不过我也确认了下并没有出现此文中误make出错误cpu target的代码的问题…
最终,还是在国际友人的问题回答中找到了答案:在v4l-utils的package define段中DEPENDS换$(CXX_DEPENDS)为+libstdcpp后make即可。

博主友情提示:

如在您的评论中需要提及如QQ号、微信号、电子邮件地址或其他隐私敏感信息,欢迎通过>>博主专用加密工具v2<<加密后发布,原文只有博主可以看到。