rust 交叉编译树莓派程序

rust 交叉编译树莓派程序

使用 rust 写树莓派程序时,如果直接在树莓派上进行编译,速度非常慢,如果是 zero 那更加是慢到受不了。因此最好是能通过开发机编译完后,直接放到树莓派上运行。

由于开发机上的 cpu 架构、操作系统和目标机不同,开发机通常是 x86 架构,系统可以是 mac、linux、windows,而树莓派则为 armv6 或 armv7 的 linux 系统。未经过特殊处理,默认的编译工具链编译出的程序只适合开发机上运行,为特定目标编译需要一套别的编译工具链,这种方法被称为交叉编译 cross compilation。

要注意,不同版本的树莓派的 cpu 架构不一样,具体可查看

cat /proc/cpuinfo

linux 上进行交叉编译

linux 上需要安装 gcc 的交叉编译工具

sudo apt-get install gcc-arm-linux-gnueabihf

然后通过 rustup 安装不同的目标支持

rustup target add arm-unknown-linux-gnueabihf       # armv6
rustup target add armv7-unknown-linux-gnueabihf     # armv7

mac 上进行交叉编译

现在已经有开发者把交叉编译工具做个 brew 安装脚本,安装

brew install FiloSottile/musl-cross/musl-cross --without-x86_64 --with-arm-hf

这个交叉编译工具使用的是 musl c 库,跨平台,性能比 glibc 要差一点。

然后通过 rustup 安装不同的目标支持

rustup target add arm-unknown-linux-musleabihf      # armv6
rustup target add armv7-unknown-linux-musleabihf    # armv7

编译设置

在项目下创建一个 .cargo/config 文件,内容为

[target.arm-unknown-linux-musleabihf]
linker = "arm-linux-musleabihf-ld"

[target.armv7-unknown-linux-musleabihf]
linker = "arm-linux-musleabihf-ld"

[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-ld"

[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-ld"

然后用按照不同的开发机、目标机类型,使用 cargo 进行编译

cargo build --target arm-unknown-linux-gnueabihf --release      # armv6, linux
cargo build --target armv7-unknown-linux-gnueabihf --release    # armv7, linux
cargo build --target arm-unknown-linux-musleabihf --release     # armv6, mac
cargo build --target armv7-unknown-linux-musleabihf --release   # armv7, mac

编译完后,在 target/<目标类型>/release 中可找到对应的可执行文件,copy 到目标上就可以运行。

这个文件也可使用 strip 工具来删掉一些符号,从而减少整个可执行文件的体积。

原文地址:https://www.cnblogs.com/fengyc/p/12198178.html

时间: 2024-10-03 23:15:28

rust 交叉编译树莓派程序的相关文章

Ubuntu Qt 交叉编译(树莓派2b)

在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征:有时是因为目的平台上的资源贫乏,无法运行所需要的编译器:有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器. 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行

LINUX主机上交叉编译树莓派详细教程

LINUX主机OS:Ubuntu14.04 64位,运行在wmware workstation 10上. 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspbian-jessie. 1.为什么需要交叉编译 在Ubuntu上直接编译一个.c源文件可以用系统自带的gcc编译器编译test.c gcc test.c -o test 然后执行生成的二进制文件 ./test 交叉编译就是把编译的过程在LINUX PC(或其它主机)上执行,然后拷贝二进制可执行文件到树莓派(或其

极路由1s(mt7620a)OpenWrt交叉编译go程序

起因,由于coolpy5核心转换到go语言开发,所以目前超人正在进行相关的技术攻关,在程序编写方面一切都相对顺利.由于coolpy5是一个真正的商业级性能的系统也考滤到coolpy之前的版本已经确定的coolpy是支持以家庭路由器为雾计算节点直接实现智能家居或智慧农业的离线解决方案,所以超人才进行了这一次技术预测试,也为以后coolpy这环节的闭环作准备工作.以下文章关于openwrt相关的基础将会略过,看不懂的朋友请自行查找相关知识点. 略过知识点: 1.linux基础(交叉编译基础) 2.o

linux:交叉编译后程序的下载方式

1.连接好开发板串口线,网口线,电源线:2.在PC机linux中启动minicom(串口通讯工具):3.启动开发板电源,开发板加载linux,加载信息通过串口打印到minicom上,如minicom不输出信息,检查minicom检测的端口是否正确,通常情况下设置监测端口是/dev/ttyS0,如不是用"minicom -s"来设置;4.交叉编译下载,把pc机端的程序通过arm-linux-gcc编译,把编译生成的ARM可执行程序下载到开发板端执行: 有三种常用方法,第一种,把文件从PC

QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)

前两天入手了一块2.8’的tft液晶显示屏,于是和树莓派连了一发,成功将命令行显示在了这块小的可怜的屏幕上之后,觉得这屏幕就显示个黑白内容太浪费了,于是考虑开发一个”脸”(图形用户界面,GUI).首先考虑用C语言或者Python来堆图形界面,但是发现不管是C语言的图形库SDL亦或者OpenGL来堆这货都有点麻烦,毕竟我也不是想显示个太过于复杂的图形界面在那块屏幕上,只是显示一个最基本的文字数字就满足了.于是考虑到QT库.之前曾经学过一段时间的QT For Win32,那个环境很好搭建,从http

实验一:认识树莓派

实验器材 硬件 树莓派板子一块: 5V/1A电源一个: microUSB线一根: USB-TTL串口线一根(FT232RL芯片或PL2303芯片). PC(Windows/MacOS/Linux)一台: 以太网线一根: 路由器一台 软件 PC上的USB-TTL串口线配套的驱动程序: PC上的串口终端软件putty等: PC上的SSH软件putty等: sftp传输软件FileZilla: 交叉编译软件: samba.samba-common-bin软件. 实验步骤 1.给出拷贝得到的pcDuin

半个月使用rust语言的体验

从第一次下载rust语言的编译器到今天刚好第14天. 简单说一下对这个语言的感觉吧. 一.性能 把以前用java写的一个中文地址切分的算法,用rust重新实现了一下(https://github.com/naturemickey/addressCut_use_rust).运行的速度上,rust的release版本要比java快上一倍左右. java版本的代码量是800多行,而rust版本的代码量是600多行. 这个体验还是很不错的,毕竟才刚刚开始学习rust语言,很多代码自己都觉得写得丑陋无比(

alsa-lib 交叉编译以及声卡驱动测试 (转)

l  下载alsa-utils, alsa-lib, 版本要一致 http://www.alsa-project.org/main/index.php/Download l  编译alsa-lib ./configure --host=arm-none-linux-gnueabi --disable-python --prefix=/usr/share/arm-alsa/ 如果出现下列错误信息,--disable-pyhont collect2: ld returned 1 exit statu

为什么我说Rust是靠谱的编程语言

为什么我说Rust是靠谱的编程语言 作者:Liigo(庄晓立) 时间:2015年5月16日 原创链接:http://blog.csdn.net/liigo/article/details/45757123 版权声明:未经作者许可不得转载:授权转载需注明出处. 序言:本文试图帮您解答"我要不要(投入大量时间和精力)学习Rust语言?"这个问题.作者尽量较少的谈及Rust语言本身,反而尝试从Rust语言周边入手,长时间.大范围.多角度地考察,研判Rust语言是否靠谱,并给出尽可能客观的理由