作者: 刘天明

邮箱: bellskinling@gmail.com

博客链接: http://blog.csdn.net/bellskinling

转载请注明出处.

接上文, 有了支持arm版本的Rust后, 我们就可以编译在arm下运行的程序了, 下面, 根我一起来体验一下吧.

使用rustc交叉编译arm静态库

首先来试验一下静态库的编译.新建一个文件arm_lib.rs:
        #![crate_type = "lib"]
                pub fn test() {
                    println!("my lib");
                }
然后编译:
rustc --target=arm-unknown-linux-gnueabi arm_lib.rs
注意, 在这个编译命令中, "--target=arm-unknown-linux-gnueabi" 表示我们编译的版本是不支持硬件浮点(hard-float)的arm的库, 如果读者编译的Rust是支持硬件浮点的,那么编译命令需要改为:
rustc --target=arm-unknown-linux-gnueabihf arm_lib.rs
执行命令后, 正常情况下是没有输出任何信息的, 并且编译后会产生一个libarm_lib.rlib库文件:
这表明我们的库已经编译成功了.

使用rustc交叉编译arm静态的可执行文件

新建文件arm_exe.rs:
fn main() {
    println!("Hello, Rust for arm");
}
然后交叉编译:
rustc --target=arm-unknown-linux-gnueabi arm_exe.rs
很可惜, 编译可执行文件时, 发生了错误:
这个错误输出这么多, 看着很吓人, 但其实其说明的问题很简单, 即我们的链接器出现了错误.
原因出在rustc在编译可执行文件时,使用的链接器是cc, 而cc默认是gcc的一个软链接, 因此导致了rsutc在编译arm时, 使用了本地的gcc的链接器, OMG!!
经过我google后, 我找到了解决方法:
rustc -C linker=arm-linux-gnueabi-gcc --target=arm-unknown-linux-gnueabi arm_exe.rs
即, 在交叉编译时, 指定编译的链接器为交叉编译工具链: -C linker=arm-linux-gnueabi-gcc .
再次执行, OK, 没有任何错误, 查看当前目录, 产生了一个arm_exe文件:
file 指令清楚的说明了我们编译出了一个arm上可以运行的可执行文件, 拿去到开发板上面运行一下吧.

使用Cargo交叉编译

使用Cargo交叉编译时, 我们同理需要指定交叉编译的链接器.根据http://doc.crates.io/config.html的说明, 我的配置如下:
                cat ~/.ccargo/config
                    [target.arm-unknown-linux-gnueabi]
                    linker = "arm-linux-gnueabi-gcc"
                    ar = "arm-linux-gnueabi-gcc"
其中linker = "arm-linux-gnueabi-gcc" 表示进行交叉编译时使用的链接器. ar = "arm-linux-gnueabi-gcc"表示交叉编译的打包程序, 这一项可以不用设置.
上面是我的Cargo的配置文件,读者可以根据自己的实际情况设置.
设置好Cargo后, 新建一个工程来试验一下吧:
cargo new --bin hello
cd hello
cargo build --target=arm-unknown-linux-gnueabi
注意, 使用cargo进行交叉编译时, 也需要指定平台 --target=arm-unknown-linux-gnueabi
看看编译后, 都产生了什么吧:
file忠实地告诉了我们, cargo编译出了一个arm版本的可执行文件. 那么,  拿去开发板下面运行一下吧

使用Rust交叉编译arm程序相关推荐

  1. 在windows上,用cmake 交叉编译arm程序

    在windows上,用cmake 交叉编译arm程序.生成器用nijia(或用MinGW,此时, cmake执行时,指定生成器为 -G "MinGW Makefiles", 编译用 ...

  2. Rust交叉编译开发环境的搭建

    为嵌入式开发引入新的编程语言 对于嵌入式系统软件和应用软件的开发而言,编程语言的重要性次于整体的软件架构设计的重要性.不过仍有必要谨慎地选择编程语言,因为这涉及开发效率.软件性能,以及团队成员的技术能 ...

  3. 交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块

    前不久导师要求交叉编译一个基于arm平台开发的内核模块来练手,在网上查了很多资料才弄出来,于是将这些零散的信息综合起来给和我一样的入门人员了解.水平有限,请谅解~ 1.安装arm-none-linux ...

  4. gdb的简单使用和gdb+gdbserver方式进行ARM程序调试

    gdb的简单使用 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB ...

  5. DM8168 --交叉编译ARM版 Qt (qt-everywhere-opensource-src-4.8.4)

    因实际项目需求,需将Qt编译成LINUX-ARM版,以下为整个操作过程,使用Qt编写的程序已在实际开发板上运行,在此贴出,但愿能为需要的朋友提供上帮助. 准备工作: Linux内核版本:        ...

  6. linux使用cmake交叉编译arm32程序

    linux使用cmake交叉编译arm32程序 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 linux使用cmake交叉 ...

  7. jlink怎么调试linux程序_【转】ubuntu linux下openocd + gdb-insight 用Jlink调试arm程序

    openocd版本为svn 1214,insight版本为6.8 开发环境为ubuntu-8.04 包都升级到最新.2008.12.8 板子为自己设计的LPC2294的板子,BANK0 为SST39V ...

  8. QT 交叉编译 ARM / CSKY

    参考: QT 下载地址 环境: ubuntu16.04(虚拟机) QT版本:qt-everywhere-src-5.12.9 运行架构:ARMV7 / CSKY 下文记录的交叉编译的目标运行架构为 A ...

  9. 【干货来袭】arm程序汇编指令总结,让你更高效的学习!

    现在学嵌入式的人也是越来越多了,那当然arm程序也是必须要学的,在这里有很多人对arm程序汇编指令都或多或少的不了解,可以说不熟悉,今天就以arm程序来看,让你对arm程序汇编指令有更深入的学习. 首 ...

最新文章

  1. python进阶书籍推荐-豆瓣评分9.4!年度最值得推荐的Python进阶书
  2. python学习费用-Python培训多少钱?学习Python技术成本高?
  3. linux 下ssh端口反弹,利用ssh隧道反弹shell
  4. 如何和老师沟通好博士的申请呢?
  5. 1121 if条件语句练习--输入年月日判断执行
  6. $('tr',grid) 是什么选择器?
  7. oracle12输出文件性能慢,输出选项 (Oracle Solaris Studio 12.2:性能分析器)
  8. 为什么我的计算机无法评分,高手看看我的电脑鲁大师怎么评分这么低啊
  9. SuseLinux详解(1)——设置开机启动为命令行模式
  10. 利用BI搭建零售业数据信息平台
  11. GO语言练习:网络编程 ICMP 示例
  12. Intel处理器系列
  13. Android 获取应用签名
  14. hprose for php,hprose for php
  15. jquery M97-datepicker日历控件
  16. 科学计算机上lg怎么打,科学计算器对数
  17. ps4正在连接ea服务器,ps4极品飞车19连不上ea服务器 | 手游网游页游攻略大全
  18. iOS自动化打包发布之fastlane 实现 发布AppStore 蒲公英
  19. vue跳转新页面链接以及url 转码
  20. android手机装win10吗,你真没有看错!Android手机一秒变Win10

热门文章

  1. Mac Python3.9 星际争霸
  2. 更彻底清理微信存储空间让小存储手机继续生存
  3. 斯诺登质疑 WikiLeaks 发布泄密材料的方法
  4. 隆重推荐kmplayer播放器——我的最爱播放器
  5. Go语言-切片和map
  6. C++数组求和用自带的库超级方便
  7. ansys参数化编程与命令手册_当结构设计遇到遗传算法应用ANSYS和MATLAB联合仿真优化设计探索(前传)...
  8. zabbix6 通过脚本监控SSL证书到期时间
  9. 怎样寻找可使用的联通宽带账号及密码
  10. 视频播放相关的网络协议