centos上用cmake交叉编译树莓派版的dlib

 

人工智能大火,自然大家都会想要在树莓派上跑个模型折腾折腾。在树莓派上有跑TF的,有跑CAFFE的,自然少不了dlib,想到dlib性能比较好,我也想在树莓派上试试dlib,但是网上查了半天,发下树莓派上跑dlib的,基本都是靠在树莓派上直接编译dlib源码生成的库来弄,而dlib编译又需要很多的内存,树莓派的1G内存有显得很紧张,所以网上的方法基本都是增加swap区,把tf卡上的空间用来和内存交换,这么做效率低不说,还很伤tf卡,所以我决定另辟蹊径,用交叉编译的方法去解决,从此跳入了一个大坑。

首先交叉编译需要环境,这个好办,树莓派的交叉编译环境还是很成熟的,github上有工具仓库,https://github.com/raspberrypi/tools/,不过windows上的交叉编译以失败告终,试过mingw, cygwin,都没成功,还折腾了很久很久,只能转向用linux交叉编译,毕竟平台相似,坑少些。于是我转向采用我的centos 7的机器交叉编译。

主要参考的是这篇:https://stackoverflow.com/questions/19162072/how-to-install-the-raspberry-pi-cross-compiler-on-my-linux-host-machine

先弄清交叉编译的原理,因为我的centos是x86的架构,而树莓派是arm的,所以不通过交叉编译,在其中一个平台上编译的程序显然无法在另一个平台上运行,毕竟指令集都不一样,即使操作系统一样,那只代表操作系统的线程管理、内存管理、文件系统等一样,但是程序执行还依赖硬件环境。所以交叉编译就是使用专用的编译器,在主机平台(centos)上编译目标平台(raspberry pi)上的程序,这里专用编译器就是https://github.com/raspberrypi/tools/里的GCC,经过改造,使得该GCC能在特定主机平台运行,并能够编译出在目标平台上运行的程序。所以交叉编译第一步就是是的编译的命令能通过交叉编译工具里的GCC去执行。

对了,前述参考链接里有说到,需要先安装的软件

apt-get i
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章