树莓派之交叉编译,如何获得交叉编译工具链,以及带有wiringPi库的交叉编译如何处理

本文详细介绍了树莓派交叉编译的原理和原因,包括什么是交叉编译、为何需要进行、以及宿主机和目标机的区别。文章还阐述了如何获取和配置交叉编译工具链,通过具体步骤指导读者进行安装和验证。此外,文章探讨了带有wiringPi库的交叉编译问题,分析了错误原因并提示了后续解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、首先我们来认清楚交叉编译是什么,为什么要进行交叉编译?
(1)什么是交叉编译?
答:交叉编译是在一个平台上生成另一个平台上的可执行代码。
例如:我们在Windows平台上编写的C51的代码,并编译成在C51上可执行的代码,例xxx.hex文件,这个文件是在C51上运行的并不是在Windows上运行的

什么是编译呢?
答:编译就是在一个平台上生成在该平台上的可执行代码
例如:C51和stm32 的交叉编译发生在keil(集成环境上面)

(2)为什么要进行交叉编译呢?
原因:平台上不允许或不能够安装我们所需要的编译器,比如C51
a.因为目的平台上的资源贫乏,无法运行我们所需要的编译器
b.既然树莓派有自己的操作系统(linux),那么树莓派是不是不需要进行交叉编译呢?
答:这是错的,树莓派也要进行交叉编译
树莓派有时候也是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器,操作系统也是代码,也是需要进行编译的。

平台运行至少需要两样东西:BootLoader(启动引导代码)以及操作系统核心

c.那么什么是宿主机(host)和目标机(target)呢?
答:宿主机:编辑和编译程序的平台,一般是基于X86PC机,通常也被称为i而主机
目标机:用户开发的系统,通常都是非X86平台,宿主机编译得到的可执行的代码在目标机上运行

d.交叉编译需要用到的 工具有哪些?
交叉编译器、交叉编译工具链
那么接下来我们就来讲一下交叉编译工具链

二、交叉编译工具链的安装

1.交叉编译工具链的安装网址
进入网址后选tools
在这里插入图片描述
选择tools之后选右上角的Code,再选择Code底下的Download ZIP,这样就能够将交叉编译工具链的压缩包下载回来了
在这里插入图片描述

2.交叉编译工具链的压缩包下载好了之后,我们就来解压一下压缩包(这些操作都是在linux虚拟机下进行的)
a.记得在上面的交叉编译工具链压缩包的下载的时候尽量将压缩包下载回到windowslinux的共享文件夹中,这样方便进行解压,用FileZilla进行文件的传输也是可以的,无论是共享文件夹还是FileZilla都只是文件传输的一种手段而已

b.在linux的工作目录下新建一个新的目录lessonPi(这个都是随意的啦,每个人都不一样的,到时候配置环境变量的时候能够找到这个路径即可)
1)进入新建的目录/home/CLC/lessonPi
从共享文件夹中拷贝交叉编译工具链的压缩包到当前目录
cp /mnt/hgfs/sharefromwindows/tools-master.zip . 千万别漏了这个.,这个.的意思是表示当前目录的意思(上面那个路径是我虚拟机上跟Windows的共享文件夹的路径,每个人的都不尽相同)

2)将压缩包拷贝过来了之后就是将压缩包进行解压了
用指令 unzip tools-master.zip 进行解压

3)解压完了之后进入到交叉编译工具链所在的路径
cd /home/CLC/lessonPi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
进入到这个路径底下之后,用pwd指令打印出这个路径,然后复制下来
我们看到很多可执行文件(绿色),和软链接(蓝色),红框内的那个软链接就是我们要用到的

在这里插入图片描述
ls -l来查看一下,软链接实际用的是它所指向的一个可执行文件,软链接不占内存只是一个符号指向了这个位置

从github.com/raspberrypi/tools完整下载的主分支,直接git太慢还容易失败,特意分享出来,实测在Ubuntu 18上安装x64工具链可用,gcc版本:4.8.3. 文件300M+,不能上传大于220M的,尝试过解压后分卷,会导致安装有问题,所以直接发一个链接,大家去那里下吧。 文件信息: └─tools-master ├─arm-bcm2708 │ ├─arm-bcm2708-linux-gnueabi │ │ ├─arm-bcm2708-linux-gnueabi │ │ │ ├─bin │ │ │ ├─debug-root │ │ │ │ └─usr │ │ │ │ └─bin │ │ │ ├─include │ │ │ │ └─c++ │ │ │ │ └─4.7.1 │ │ │ │ ├─arm-bcm2708-linux-gnueabi │ │ │ │ │ └─bits │ │ │ │ ├─backward │ │ │ │ ├─bits │ │ │ │ ├─debug │ │ │ │ ├─decimal │ │ │ │ ├─ext │ │ │ │ │ └─pb_ds │ │ │ │ │ └─detail │ │ │ │ │ ├─binary_heap_ │ │ │ │ │ ├─binomial_heap_ │ │ │ │ │ ├─binomial_heap_base_ │ │ │ │ │ ├─bin_search_tree_ │ │ │ │ │ ├─branch_policy │ │ │ │ │ ├─cc_hash_table_map_ │ │ │ │ │ ├─eq_fn │ │ │ │ │ ├─gp_hash_table_map_ │ │ │ │ │ ├─hash_fn │ │ │ │ │ ├─left_child_next_sibling_heap_ │ │ │ │ │ ├─list_update_map_ │ │ │ │ │ ├─list_update_policy │ │ │ │ │ ├─ov_tree_map_ │ │ │ │ │ ├─pairing_heap_ │ │ │ │ │ ├─pat_trie_ │ │ │ │ │ ├─rb_tree_map_ │ │ │ │ │ ├─rc_binomial_heap_ │ │ │ │ │ ├─resize_policy │ │ │ │ │ ├─splay_tree_ │ │ │ │ │ ├─thin_heap_ │ │ │ │ │ ├─tree_policy │ │ │ │ │ ├─trie_policy │ │ │ │ │ └─unordered_iterator │ │ │ │ ├─profile │ │ │ │ │ └─impl │ │ │ │ ├─tr1 │ │ │ │ └─tr2 │ │ │ └─sysroot │ │ │ ├─etc │ │ │ ├─lib │ │ │ ├─sbin │ │ │ └─usr │ │ │ ├─bin │ │ │ ├─include │ │ │ │ ├─arpa │ │ │ │ ├─asm │ │ │ │ ├─asm-generic │ │ │ │ ├─bits │ │ │ │ ├─drm │ │ │ │ ├─gnu │ │ │ │ ├─linux │ │ │ │ │ ├─byteorder │ │ │ │ │ ├─caif │ │ │ │ │ ├─can │ │ │ │ │ ├─dvb │ │ │ │ │ ├─hdlc │ │ │ │ │ ├─isdn │ │ │ │ │ ├─mmc │ │ │ │ │ ├─netfilter │ │ │ │ │ │ └─ipset │ │ │ │ │ ├─netfilter_arp │ │ │ │ │ ├─netfilter_bridge │ │ │ │ │ ├─netfilter_ipv4 │ │ │ │ │ ├─netfilter_ipv6 │ │ │ │ │ ├─nfsd │ │ │ │ │ ├─raid │ │ │ │ │ ├─spi │ │ │ │ │ ├─sunrpc │ │ │ │ │ ├─tc_act │ │ │ │ │ ├─tc_ematch │ │ │ │ │ ├─usb │ │ │ │ │ └─wimax │ │ │ │ ├─mtd │ │ │ │ ├─net │ │ │ │ ├─netash │ │ │ │ ├─netatalk │ │ │ │ ├─netax25 │ │ │ │ ├─neteconet │ │ │ │ ├─netinet │ │ │ │ ├─netipx │ │ │ │ ├─netiucv │ │ │ │ ├─netpacket │ │ │ │ ├─netrom │ │ │ │ ├─netrose │ │ │ │ ├─nfs │ │ │ │ ├─protocols │ │ │ │ ├─rdma │ │ │ │ ├─rpc │ │ │ │ ├─rpcsvc │ │ │ │ ├─scsi │ │ │ │ │ └─fc │ │ │ │ ├─sound │ │ │ │ ├─sys │ │ │ │ ├─video │ │ │ │ └─xen │ │ │ ├─lib │ │ │ │ └─gconv │ │ │ ├─libexec │ │ │ ├─sbin │ │ │ └─share │ │ │ ├─i18n │ │ │ │ ├─charmaps │ │ │ │ └─locales │ │ │ └─locale │ │ │ ├─be │ │ │ │ └─LC_MESSAGES │ │ │ ├─bg │ │ │ │ └─LC_MESSAGES │ │ │ ├─ca │ │ │ │ └─LC_MESSAGES │ │ │ ├─cs │ │ │ │ └─LC_MESSAGES │ │ │ ├─da │ │ │ │ └─LC_MESSAGES │ │ │ ├─de │ │ │ │ └─LC_MESSAGES │ │ │ ├─el │ │ │ │ └─LC_MESSAGES │ │ │ ├─en_GB │ │ │ │ └─LC_MESSAGES │ │ │ ├─es │ │ │ │ └─LC_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值