1.如何编译qt与opencv源码
a.当时我是参考了很多文章,试过很多次才成功的,这里推荐两个比较全面的教程。
opencv: https://blog.csdn.net/zdyueguanyun/article/details/51272989
qt: https://blog.csdn.net/jzzy_hony/article/details/80883473
如果大家感兴趣可以自己去试试编译一下。
b.每个人的电脑不同,环境不同,问题也多种多样,如果你不想再在这上面浪费时间,我也提供我编译好的库给大家
链接:https://pan.baidu.com/s/1kKHD1iR19jXUIEHtgmWpbA
提取码:ufkl
注意:
编译链为arm-linux-gnueabi-
下载解压到/usr/local目录下
2.如何使用编译好的源码库生成arm架构可执行程序
a.为了使qmake工具起作用,我们要把它放到环境变量里,有的教程是直接修改/etc/profile(全局有效),我们这里新建一个qmake-v.sh脚本文件(当前终端有效),放在~/下,后面会用到,内容如下:
完成后继续下一步
b.现在我们编译工具,库都有了,就剩写代码了,打开qt,新建工程写好代码,编译执行无错
3.如何生成arm可执行程序
a.关闭QT,进入工程所在文件夹首先复制一份源代码
b.进入复制的源代码文件夹里source一下上面保存的脚本文件
c.现在开始编译arm版程序
修改 .pro文件里的INCLUDEPATH和LIBS路径为编译好的arm库路径
qmake生成Makefile(其中指定了编译工具链),make编译,在qt软件中执行没错的话,这一步就不会报错
查看一下文件属性
4.如何移植到arm板上
a.将编译好的文件夹中的lib拷贝到板子里,并添加环境变量
qt库和opencv库路径
上面QT环境变量非本人写,以后在研究
b.程序拷贝到任意目录并执行
这是由于板子libm.so.6,libstdc++.so.6的版本低,其中还有libc.so.6(放弃该版本opencv,libc.so.6升级还未搞懂)改换opencv3.3.1版本,运行依旧要升级libm.so.6,libstdc++.so.6
c.升级libm.so.6,libstdc++.so.6(做好重新刷机的准备)
将libm-2.31.so和libstdc++.so.6.28拷贝到板子的/lib下
再cp libm-2.23.so libstdc++.so.6.0.21 ~/
进入~下,执行如下命令
ln -s libm-2.23.so libm.so.6 ln -s libstdc++.so.6.0.21 libstdc++.so.6
然后进入/lib下执行
export LD_LIBRARY_PATH=/root:$LD_LIBRARY_PATH (为了防止rm后,命令无法使用)
rm libm.so.6 libstdc++.so.6
ln -s libm-2.31.so libm.so.6
ln -s libstdc++.so.6.0.28 libstdc++.so.6
d.最终运行结果