本人这两天在移植基于Qt3+opencv-0.9.7的应用程序到北京OURS-PXA270开发板上,其中的问题多多,到现在还没完全解决,但是也解决了遇到的一些问题,现在把它记录下来,以免以后再碰到类似问题,不知从何下手。
1、             在交叉编译时,提示在库目录中没有找到类似这样的库(-lcv-lcvaux-lcxcore-lhighgui):
我在交叉编译之前,首先用非交叉编译并运行通过,但是到我再使用交叉编译的时候却无法找到那样的库,但我明明就是有添加进去的。后来在网上搜索,和向网友大牛们提问的时候,他们告诉我这是因为编译器的版本不一致,生成那些动态库的是一个编译器版本,但是编译工程文件的时候又是另外一个版本的编译器,所以即便你有把那库添加进去了也是找不到的,因为这不是它编译出来的库,它不认你。(没办法,呵……)
这样,我只能从新用交叉编译生成库文件了即使用arm-linux-gcc重新编译生成那些库,然后,把这些重新生成的库替换原来的,再重新编译工程,这样就顺利通过了。
2、             关于ARM10 开发板上“Illegal instruction”的错误提示:
昨天把全部编译(在我自己电脑上编译的,跟实验室的电脑环境有点不一样,导致问题)好了的程序烧到开发板上,(一切顺利,心里有点小高兴,殊不知问题还多多呢)我运行“./camera –qws”这个用到了opencv是视觉库的,出来错误提示:Illegal instruction”,我先是在网上搜索答案,大多都是说是什么EABI吖,什么编译器不匹配啦,busybox什么的,说实话,我都不懂http://blog.csdn.net/qiaoliang328/archive/2009/11/24/4866367.aspx,那些也没法帮我解决我的问题。我就继续问大牛们,他们很热心,帮我慢慢的分析;
最后,发现应该是浮点运算问题,因为视觉库opencv很多都用到浮点运算的,他们叫我检查FP的配置,我哪懂啊,又是上网查,难啊……后来,后来,他说如果我编译器支持软浮点运算的话,那就全部使用软浮点运算指定编译。这样我编译 make –msoft-float”,“–msoft-float”参数指定使用软浮点运算,问题来了,提示说:“./OpenCVlib/libhighgui.so uses hardware FP, whereas camera uses software FP 
File format not recognized: failed to merge target specific data of file ./OpenCVlib/libhighgui.so
大概的意思就是“libhighgui.so”使用hardware FP,而“camera”使用software FP,所以不能通过(我这次是拿到实验室的电脑了,libhighgui.so是在我自己电脑上编译的,不一样)。所以我就照着大大说,全部用参数“-msoft-float”指定软浮点运算。就是在重新编译生成库,也使用“-msoft-float”参数,编译工程文件是也使用“-msoft-float”,这样,大家都是使用软浮点运算了,所以就没有出错啦,通过……
编译好了以后,我再使用“arm-linux-readelf -e camera”来查看,发现是使用了软浮点了,有这么一句出来:“Flags: 0x202, has entry point, GNU EABI, software FP”,之前是没有“software FP”的,还有那个“libhighgui.so”也是一样。OK……!!!完成。
再到开发板上运行再也没有报错了!
相关的浮点运算与Qt移植问题,有一篇很好的文章参考:http://hi.baidu.com/adrain001/blog/item/7a40ac08777b409d0a7b82ac.html
3、我有些程序放到开发板上面没有界面显示,其中它们都有包含GSM的,但有些可以显示,可以显示的都没有包含GSM的,所以我怀疑了,应该是GSM这个模块的程序在出错了。问题还没有解决呢……期待解决……