树莓派交叉编译工具链安装及使用

一、原材料 tool-master
宿主机:x86
目标机:树莓派
tool-master下载地址:https://github.com/raspberrypi/tools
二、安装步骤
1.解压zip
在压缩包目录下输入unzip 文件名解压
2.进入文件夹
cd arm-bcm2708
cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64(32位的不带-x64)
ls
找到arm-linux-gnueabihf-gcc这个软链接
./arm-linux-gnueabihf-gcc -v 打印出gcc的版本信息
看是不是4.8.3
但是每次使用工具都要进入这个路径会很麻烦 所以需要对环境变量进行操作
有两种方式 一种时临时的,一种可以永久使用
临时方法:
echo $PATH 获取当前的环境变量
pwd获取当前路径
export PATH = /usr/…(echo 获得的 到home前的路径)… + pwd的路径
这种方法时临时的 并且新打开的窗口依然无法使用
永久方法:
修改工作目录下的.bashrc文件 在文件尾部输入
export PATH = /usr/…(echo 获得的 到home前的路径)… + pwd的路径
然后source .bashrc 立即执行

三、使用
原材料 test.c
1.gcc test.c -o test1
生产一个test1文件
file test1 查看文件属性 发现只能运行在x86-64的环境下
2.arm-linux-gnueabihf-gcc test.c -o test2
生成一个test2文件
file test2 查看文件属性 发现只能运行在ARM环境下
3.发送test2到树莓派
scp test2 pi@192.168.43.33:/home/pi
scp:指令名
test2:文件名
pi:目标设备名
@192.168.43.33:目标设备的IP地址
:/home/pi :存放的绝对路径

发送指令后输入密码
如出现The authenticity of host ‘XXXX’ can’t be established的问题
参考https://blog.csdn.net/xyh153996626/article/details/53333348
在树莓派下直接运行即可

	/home/xys/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi
	collect2: error: ld returned 1 exit status

如我的ubuntu上没有安装wiringPi的库,那么需要去下载一个库,如果下载后build发现这个库的环境是x86的,而交叉编译的目标需要是arm的。这样arm-linux-gnueabihf-gcc时编译器会报错,未定义wiringPiSetup等api。这时需要我们交叉编译wiringPi库。
但是最快捷的方式就是从树莓派上直接拿一个wiringPi库过来。
在/usr/lib中找到libwiringPi.so这个软链接 查看一下他指向那个动态库。
把指向的动态库传给ubuntu。
scp libwiringPi.so.2.50 【设备名】@192.168.43.101:/home/xys/lessonPi
在lessonPi文件夹下就能找到这个库了
接下来我们给这个库创建一个软链接。
ln -s libwiringPi.so libwiringPi.so.2.50
软链接相关描述查看这篇文章:
https://www.cnblogs.com/zhangna1998517/p/11347364.html
实际上软链接就像是windows的快捷方式,软链接不占用内存空间,仅仅是一个符号而已,也可以用指针来理解,相当于这个文本中存放的是源文件的地址。
这些工作都完成后我们可以发现在wiring目录下存在libwiringPi.so这个软链接,还有前面下载并build的那个库,虽然这个库是x86的不能完成交叉编译。但是这里面会有wiringPi.h等头文件 是需要用到的
最后编译:

arm-linux-gnueabihf-gcc test3.c -I /home/xys/lessonPi/wiringPi/wiringPi -L ./ -lwiringPi -o crossCompile

生成的文件发送回树莓派直接运行就可以了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从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_
搭建 Linux 和树莓派交叉编译环境,需要完成以下几个步骤: 1. 安装交叉编译工具 在 Linux 上使用交叉编译工具来编译适用于树莓派的程序。可以在 Raspberry Pi 官网上下载适用于 Linux 的交叉编译工具。 2. 配置环境变量 将交叉编译工具的路径添加到系统的环境变量中,以便在命令行中使用。 例如,在 Ubuntu 系统中,可以编辑 /etc/environment 文件,添加以下代码: ``` export PATH=$PATH:/path/to/cross-compile-toolchain/bin ``` 将 /path/to/cross-compile-toolchain 替换为实际的交叉编译工具路径。 3. 编写交叉编译脚本 编写一个简单的交叉编译脚本,以便能够快速编译适用于树莓派的程序。 例如,在使用 CMake 构建程序时,可以编写一个名为 raspberrypi.cmake 的脚本文件,将以下代码添加到 CMakeLists.txt 文件中: ``` set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER /path/to/cross-compile-toolchain/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER /path/to/cross-compile-toolchain/bin/arm-linux-gnueabihf-g++) set(CMAKE_FIND_ROOT_PATH /path/to/cross-compile-toolchain/arm-linux-gnueabihf/sysroot) ``` 将 /path/to/cross-compile-toolchain 替换为实际的交叉编译工具路径。 4. 编译程序 使用交叉编译工具编译程序。 例如,在使用 CMake 构建程序时,可以在命令行中运行以下命令: ``` mkdir build cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=raspberrypi.cmake make ``` 这将使用 raspberrypi.cmake 脚本文件来构建程序,并使用交叉编译工具来编译程序。 完成上述步骤后,就可以在 Linux 上搭建树莓派交叉编译环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值