opencv的移植过程笔记

这两天在做Qt3应用程序的移植,其中这应用程序中有视频摄像头功能,所以使用了一个叫
OpenCV的视觉库。
    这应用程序都是别人写好的,哈……那些所有用到的OpenCV视觉库都随工程带给了我,可是我
在编译的时候,它老是报“undefined reference to ...”这样的错误。这些错误,我起初以为那
个函数没有定义,但是我明明就有定义的,我就翻到Makefile文件去看,发现这些OpenCV库却没有
被包含进来,也就是根本没有被连接到,于是我就自己手动添加。
    这样,好了。没有再报那些烦人的undefined reference to错了,但是一波刚平,另一波又起
……无奈。那就是在这些所有库路径中找不到类似:lcv,lcvaux,lcxcore,lhighgui 这些库,
我呀,我呀……不是都放在工程下了吗???它也到那里去找了,竟然说找不到???天理呀?我
上网问别人,和百度,Google。其中有人说,是所用的编译器版本不对,生成OpenCV库的编译器版
本与现在我所用的编译器不一致。
    于是,我上网去重新下载了一个opencv的源代码来编译,后来把这些生成的lib库拷贝到我的
工程底下去替换原有的。这下,我重新编译,终于中功告成了,并不是大功告成呀。哈……因为这
只是在PC的环境下,并不是交叉编译呢。
    下面,我就开始交叉编译了,郁闷呀。!!!刚有点高兴的,又受打击了。又说找遍了库路径
都没找到刚才上面所说的那些库,真郁闷。难道又是编译环境不一致?我猜测了……
    那我就去再用交叉编译一下OpenCV源码,让其重新生成库,咋滴?试试看……
    这样操作,先make clean
然后configure
./configure --host=arm-linux --without-gtk --without-carbon --without-v4l --without-
quicktime --without-1394libs --without-ffmpeg --without-python --without-swig
这样就不会编译gtk之类的东西
然后再执行make就没有问题了。
    前提是你的arm-linux-gcc环境变量已经设置好:
如果您在终端输入arm,然后敲tab能看到arm-linux-gcc,arm-linux-g++等等之类的东西,那么就
OK拉
    编译生成,安装,一切OK。我又把库给替换,(以便拿到别人那里去编译;)然后,我就又重
新编译我的工程,发现一路上都好顺利,但是快要结束时又遇到了问题,
“.OpenCVlib/libhighgui.so: undefined reference to 'cvShowImage'”
“collect2: ld returned 1 exit status”
“make: *** [client]Error 1”
    我开始以为是那个OpenCV库没有编译好,这样我重新编了一次,最后还是不行。于是,在QQ群
里面提问,一个叫“Amplio”和“LeSaRDe”的网友大大们,他们都很热心,都是好人啊。真的,
非常感谢他们。“Amplio”教我用“file libhighgui.so”去查找有没有生成的对应动态库,发现
“file libhighgui.so: symbolic link to libhighgui.so.0.9.9”,于是,又使用“file
libhighgui.so.0.9.9”,这样发现是(ARM的ELF)格式是正确的,有这个库生成。OpenCV交叉编
译有通过,然后,“Amplio”大大又教我输入:“readelf -s libhighgui.so.0.9.9|grep
cvShowImage”来查找里面有没有“cvShowImage”这个函数实现,结果发现没有在这里面定义,所
以就去Google找。(“Amplio”真是个大好人啊,他很有耐性的手把手的脚我,非常感谢他!!!

    没找到,再回QQ群问。另一个大大“LeSaRDe”(也是个大好人,我经常问他问题的,嘿嘿…
…谢谢他),他说,那个“cvShowImage”应该在“window_gtk.cpp”这个文件定义,我发
“./configure --host=arm-linux --without-gtk --without-carbon --without-v4l --without
-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig”,我说
我这样编译opencv库的,应该没有那个文件。他就问我没有gtk吗?我说应该有,于是,他就叫我
把“--without-gtk”去掉,我从新编译,出错,没发通过make。我怀疑是那个下载来的原代码有
问题,想换版本,他就叫我先搞清这个东西需要什么环境,怎么编译,不然你换了版本也是枉然啊
!所以我没换,继续去找原因!
     到现在还没搞好,不过我也算是学到不少吧,大大们教诲我要多写笔记,多做总结,这就是
经验呀!!!他说,这开发,不能一知半解的,不紧要知其然,而且要知其所以然!这就是学习!
!!
    呵呵……这笔记写了那么长,不知道自己在写什么,问题都还没解决……努力解决中……
 

你可能感兴趣的:(职场,笔记,opencv,移植,休闲)