本帖最后由 3guoyangyang7 于 2016-1-15 13:08 编辑
今天给大家带来eclipse交叉编译环境的搭建,可能有些童鞋要问了,4418的性能还是不错的完全可以直接在4418上做开发,GCC命令还是很好用的为什么要搭建pc版的交叉编译环境呢。我这只做一下解释首先,nanopi2是个开源硬件,当然,开源硬件的核心玩法就是瞎折腾,需要不同的声音,这个开源硬件的进步空间才能更大,第二,我想说的是4418再NB有我的电脑NB吗,在上边编译代码也只是应应急而已,另外我这个人比较懒,makefile想让我写一次两次还行,修改修改也还差不多,你让我写一个大型程序,去写makefile,以及后期修改,你还是杀了我吧,臣妾做不到啊,哈哈。还有就是我是从单片机入门到嵌入式的,老习惯了,喜欢用集成的开发环境IDE,所以这个显得就比较重要了,所以,想要自己make的童鞋,可以不看这篇帖子应为对你也没有什么用。但是我建议初入门的小白,还是要自己写一写makefile的,了解一下编译原理也是很有必要的,对于以后的入门是很有帮助的。赞同我说点个赞,不赞同的请拍砖,哈哈。
正式开讲之前,先普及一下交叉编译的知识。其实,当我们的开发板玩的多了就会发现,我pc机上怎么装那么多交叉编译器,通过查资料我个人的理解是这样的,交叉编译器其实是喝开发板的种类没有必然的联系的,他与主控的架构和内核的版本是挂钩的,一般情况下你用ARM的交叉编译环境的各个版本都可以来编译你的程序,但是拷到你的开发板上能不能执行,执行正不正确,那是你编译时候动态链接库导致的问题,所以一般情况下我们选用什么样的开发板配合什么样的交叉编译工具链是有道理的,但是如果你能把动态链接库匹配好,你用什么样的编译器也就没有多大影响啦。交叉编译工具链有免费授权版本的和付费版本的,面板免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。
arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-linux-gnueabihf-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
aarch64-linux-gnu-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-none-elf-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
arm-none-eabi-gcc:是 GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
这个资料来自网络。
Nonopi2的给出的交叉编译器是64位的,也是最高版本的4.9,其实友善提供的有32位的交叉编译工具链但是是4.5.1的所以要想要编译u-boot和内核以及其他程序,是需要下载相应的依赖库的,有需要的朋友我提供一篇参考文章
http://www.arm9home.net/read.php?tid-139844.html
这篇文章来自其他网络,如有侵权行为,可以快速联系我,我来删除。
在编译的时候,采用静态编译的话,还是能通过的,但是比较不爽,我还是喜欢动态链接库,所以我在编译的时候就采用了树莓派的交叉编译器,当然你也可以去网络上下载最新的编译工具链。
如果你要采用友善提供的4.5.1的话,你交叉编译的程序在开发板上可能会出现下图所示现象
这个不是说你缺少testhellow这文件导致的,而是你缺少相应的动态链接库导致的查看一下
缺少的就是红色方框中的动态链接库,这个时候你在编译的时候,makefile里加上-static采用静态编译就可以啦,但是静态连接的坏处多多。出现这种问题的原因是
在2012年4月13号的时候由Linaro组织开了一个会议,以统一各ARM板linux系统发行版的加载程序/lib/ld-linux.so.3的路径及名称,在这前:
Debian/Ubuntu 用的是:/lib/arm-linux-gnueabihf/ld-linux.so.3
Fedora, OpenSUSE用的是:/lib/ld-linux.so.3
这就会造成编译好的程序在不同的linux版本上运行不兼容,因此才会出现:No such file or directory的出错。
这会议之后的统一的加载程序是:/lib/ld-linux-armhf.so.3
所以要找编译器,也最好是找2012年4月13号之后的。现在这个问题应该明了了吧,嘿嘿,所以,有兴趣的童鞋可以采用4.5.1编译一下试试,看看是不是出现我上边所讲的这些内容,嘿嘿。我的编译器就采用树莓的编译器啦可是4.8的匹配linux3.4的内核应该没啥问题,嘿嘿。下边还要讲一下静态链接库和动态链接库的定义。嘿嘿
静态库:对函数库的连接是放在编译时期完成的,所有相关的对象文件与牵涉到的函数库连接合成一个可执行文件。程序执行时,与函数库再无瓜葛,因为所需要的函数已拷贝到自己门下,所以这些函数库被连接成静态库。
动态库:对于一些库的连接载入推迟到程序运行期间,也就是说在程序执行的时候才匹配库的名字。到此我想大家就应该明白出现上述问题的原因啦。
好了前期的科普知识完事后,我们就要进行今天的真正的主题啦,嘿嘿,记住哦,我采用的是树莓的交叉编译环境,嘿嘿。
一、交叉编译链的安装
1、下载交叉编译工具链
输入下边的指令下载
在主目录下创建目录文件如下图所示
把下载的文件解压到目录下,如下图所示
进去后会有四个目录
第一个是32位机用的,第二个是64位机用的,当然,你要是64位机你可以采用友善的交叉编译链,所以64位的可忽略。如果你不知道你的是32位机还是64位机可以使用下边的指令
如果出现是i686那就是32位的机器,如果是i386那就是64位的机器,所以自己选择吧。其实到这里交叉编译的事已将安装完了啊,因为我以前玩板子的时候还有其他的工具链所以我就不设置环境变量啦,要是又兴趣设置的话可以自行百度一下,下边的交叉工具的使用全采用绝对目录的方式。
2、查看是否正确
先查看一下工具链的版本。
进入下边的目录
然后执行下边的命令
出现下边的界面说明正确,负责可能是不匹配
版本是4.8.3是2014年1月6号的版本,这个适用。
二、下载Eclipse
下载安装之前需要先安装Java运行环境
安装完成之后
使用下边的连接在web上直接下载eclipse IDF for C/C++,32位机下载32位的,64位机下载64位的
红色方框标注的就是
然后解压压缩包到主目录,输入如下指令
tar -xv*** eclipse-cpp-kepler-R-linux-gtk-x86_64.tar.gz -C ~/
然后进入
打开eclipse
三、新建工程
第一次使用eclipse的时候,会让你指定工作目录,勾选上不再提示,如果你想更换的话,在可以选择
新建工程
输入工程名,然后按照下图选择
然后点击next会出现下面的界面。
在这个界面什么都不要选,直接点next,会出现选择交叉编译的图片
按照途中红色方框内的填写,下边的是目录,也可以是你自己工具链的目录然后点击finish,工程创建完成
添加c文件,右键工程名出现下列列表,选择红色方块中的内容
然后出现下面对话框
1是你的工程名,不需要改动,2是要新建的.c的名字,3是采用的模板类型。点击Finish
出现下边的界面添加成功
添加代码
点击保存
然后编译
控制台出现下边的信息证明编译完成
现在查看你工作目录下有没有生成二进制文件
进入目录
Workspace 是工作目录,hellonanopi2是我的工程名,Debug是我最后二进制文件存放的目录
1是你生成的二进制文件,2是你的IP地址,3是你要存放的nanopi2上的目录。
出现上边的提示,证明完成。
然后看nanopi2上有没有这个文件
执行一下看看
执行成功,哈哈,到此为止,所有的eclipse的交叉环境编译完成,写了3000字,累的够呛,希望大家回复吧,给点支持吧,不知道有没有人有意愿在eclipse里建立ssh控制台,有意愿的举个爪,我写个小续篇,如果没有意愿就算了,最起码给点支持也行啊,前几篇帖子的支持率太低了,给支持吧,动动手支持支持吧,谢谢,万分感谢,万分感谢。
其他小狂系列nanopi2请移步下边的连接
|