OpenCV 和 DC1394

来源:互联网 发布:购买域名需要备案吗 编辑:程序博客网 时间:2024/06/03 21:57

Linux在提供了及其强大的功能和自由度的同时,其繁琐的库依赖和维护有时确实是件非常头疼的事情。

 

花了一下午从Ubuntu 9.04升级到9.10,升级本身很快,没有遇到大的问题。但重新编译项目工程时,仍然试图链接libdc1394_control.so.13和 libraw1394.so.8。

 

很早以前给项目写过1394的driver,当时正好是libdc1394库从1.0升级到2.0。所以记得libdc1394_control好像是1.0下的名字。而升级过程中明确告知libdc1394-13和libraw1394-8被删除了。从错误信息看其实是opencv的 highgui需要用到1394,而升级前又一直用的是opencv1.1,所以抱怨找不到V1中的函数,比如dc1394_get_min_value

 

Solution:

1。删除opencv 1.1

2。编译/安装opencv 2.1

 

但是。。。。

因为libdc1394-v1在升级过程中没有删除干净,留了几个文件在/usr/local/lib/下:

libdc1394.a

libdc1394.la

libdc1394.so.22

libdc1394.so.22.0.0

 

opencv2.1总是先找到/usr/local/下的库,自然没有v2中定义的函数,比如dc1394_capture_is_frame_corrupt

把local下的文件改名后,opencv2.0通过了,以为大功告成,

但是。。。

 

项目文件也先搜到了/usr/local/,于是创建新的libdc1394.so.22 并链接到改了名的文件上libdc1394.so.22.0.0-v1(聪明!)

干脆把local下的文件都删了---原想留个备份来着---皆大欢喜了

 

 

后记

当初写1394接口时就发现作者好像比较随意改变接口,完全不考虑兼容的问题---实际上v1和v2也可以“兼容”,因为它们的include_name和lib_name完全不同。而且我最后用到的也是libdc1394.so.22.1.4, 好像都应该是v2以后的版本,但也有接口差异。看看下表列出的接口改变:

 

http://damien.douxchamps.net/ieee1394/libdc1394/v1.x/migration/

 

有些真是。。。比如从dc1394_set_feature_value 到 dc1394_feature_set_value

 

 

这只是一个库接口的变化带来的麻烦,而且我还对dc1394比较熟悉。Windows对用户---有时包括开发者---完全隐藏了这些细节,或者帮你解决了这些维护问题,确实方便“敏捷开发” :)