1. 程式人生 > >使用Rust交叉編譯arm程式

使用Rust交叉編譯arm程式

作者: 劉天明

郵箱: [email protected]

部落格連結: 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程式

作者: 劉天明 郵箱: [email protected] 部落格連結: http://blog.csdn.net/bellskinling 轉載請註明出處. 接上文, 有了支援arm版本的Rust後, 我們就可以編譯在arm下執行的程式了, 下面, 根我一起來

opencv交叉編譯arm環境庫,靜態,動態庫和可執行程式

在工作中遇到把基於opencv的程式碼移植到板子上執行,在網上查看了很多資料,嘗試了兩種方案,都是可行的 1.把opencv程式碼用ndk的方式編譯成可執行檔案,直接放到板子上執行,這種方式是最便捷的不用考慮板子上其他程式的干擾 附上ndk編譯程式碼,準備好下面兩個檔案後,

go交叉編譯arm上的程式

Golang 支援交叉編譯,在一個平臺上生成另一個平臺的可執行程式,最近使用了一下,非常好用,這裡備忘一下。 Mac 下編譯 Linux 和 Windows 64位可執行程式 CGO_ENABLED=0 GOOS=linux GOARCH=amd64

交叉編譯arm Linux環境下的android-tools-adb

前言     專案使用Rockchip的3399挖掘機demo板,使用官方提供的Debian Linux SDK(官方github原始碼連結:https://github.com/rockchip-linux)進行開發定製。當前需要將Android上的除錯工具adb移

Linux下的ds18b20驅動(執行環境 Fedora9.0 交叉編譯 arm-linux-gcc-4.3.2 核心版本2.6.32)

今天在各位前輩已有成就的基礎上花了兩天時間終於把這個驅動給搞定了,從開始編譯成模組看效果,進行除錯,再到編譯進核心,最後又編譯了一個介面出來,雖說大多數的程式程式碼是用各位前輩的成果,但坐下來自己收穫也不小,現在寫下來,以供以後參考,也和各位愛好者交流一下,呵呵! 一.編譯成

交叉編譯ARM版Qt(qt-everywhere-opensource-src-4.8.4)

交叉編譯ARM版 Qt (qt-everywhere-opensource-src-4.8.4) 因實際專案需求,需將Qt編譯成LINUX-ARM版,以下為整個操作過程,使用Qt編寫的程式已在實際開發板上執行,在此貼出,但願能為需要的朋友提供上幫助。 準備工作: Linux核心版本:           開

從零開始移植QT4.8.5之四--交叉編譯QT程式並執行在OK6410上

首先我們需要自己寫一個程式碼,什麼 程式碼都行,拿來別人的也可以。可以在windows或者linux上寫都行,我個人的習慣是在windows下面編輯程式碼,檢視執行效果,效果沒問題了在拿到linux下進行交叉編譯。 下面我們現在windows下寫一個最簡單的例子:你好世界!

perf交叉編譯 arm-hisiv400-linux

檔案改動配置方法基本與,perf使用arm-hisiv200-linux工具鏈類似。 但是由於arm-hisiv400-linux工具鏈編譯時,問題更多。主要記錄交叉編譯終於到的問題,或解決或繞過。 perf 工具需要zlib、binutils、elfutils庫支援

ubuntu 交叉編譯arm linux 核心

相關文章 安裝arm-linux-gcc 4.2.3 sudo tar  xvzf arm-linux-gcc-4.3.2.tar.gz  -C / 此時將安裝到/usr/local/arm下面 設定環境變數 gedit ~/.profile 在

在Linux上交叉編譯windows程式

轉自:http://www.cublog.cn/u/12592/showart_163722.html 最近幾天搞 wxWidgets,由於要同時編譯應用程式的 Windows 版本,又懶得在虛擬機器裡面編譯程式,於是想到用交叉編譯的方式在 Linux 上編譯好 Windo

嵌入式深度學習之mxnet交叉編譯Arm Linux

參考文件 本文件涉及到的目標硬體為全志H8(8核Cortex-A7,Armv7架構),但是對其他Arm晶片也有一定的借鑑意義,只需要更換交叉編譯鏈即可。 開發環境介紹 主機作業系統:Ubuntu14.04 64位 目標平臺:CQA83t 全志H8

Windows下使用Eclipse交叉編譯ARM

原文:http://www.acmesystems.it/foxg20_eclipse_windows_c 先轉過來,有時間再翻譯。 Developing in C/C++ with Eclipse Indigo on Windows This article ill

在 Visual Studio 中使用 mdk 編譯 ARM 程式

作為一個整合開發環境,Visual Studio 的強大是無可否認的。其中一個讓我欣賞的地方就是它的程式碼編輯器,特別是和 Visual Assist X 軟體配合起來使用的時候,可以很好的減輕程式設計師寫程式碼的負擔。當然直接使用 Visual Studio 作為

GDB arm-linux交叉編譯移植和使用方法(特別是對於正在執行的程式或者段錯誤的程式進行分析)

測試程式碼中的test1是用來定位堆疊段錯誤,Delay函式是用來定位程式阻塞,都可以用gdb定位出來,如下:  (1)測試程式執行時首先會有個段錯誤:./gdbtest & [[email protected] user0]$ [65334.020000] pgd = c3e14000 [

圖解如何將Ubuntu上的Qt程式交叉編譯出可在ARM平臺執行的程式(五部曲)

圖解如何將Ubuntu上的Qt程式交叉編譯出可在ARM平臺執行的程式(五部曲) (原創作品,轉載時請註明出處,商業用途前應徵得作者同意) 作者: devinoy(百度使用者) 日期:2012-10-16 版本:V1.00 Ubuntu(以ubuntu12.04為例,

Android 執行 C/C++程式 (使用 arm-linux-gcc 交叉編譯環境)

這個其實就是個人的一個小小的興趣,用C/C++寫一個小程式放在Android的系統中,然後用Java寫一個Android的UI程式來呼叫這個C/C++的程式。這裡總結了實現這個功能的一些步驟和遇到的問題。蠻有意思的。 這裡參考了下面兩篇博文,主要是關於搭建arm-lin

交叉編譯能在arm平臺上執行的Qt應用程式的步驟

        我們的電腦一般來說,現在主流的還是X86平臺(當然,隨著64位機的普及,相信以後格局會變化,暫不討論)。對於Qt應用程式來說,我們在PC機上開發的時候,因為本身我們的開發軟體Qt creator是執行在X86平臺上的,而我們編寫的應用程式也預設是在PC機上執

安裝交叉編譯工具arm-none-linux-gnueabi-gcc——Linux上編譯在android上執行的c程式

# vim /etc/bash.bashrc 在最後新增 PATH=$PATH:/usr/local/arm-2014.05/bin source /etc/bash.bashrc 使其立刻生效 開啟另一個終端 執行 arm-none-linux-gnueabi-gcc -v,顯示版本即說明安裝成功 方法二

Linux下獲取arm交叉編譯工具鏈

win 5.1 app應用 地址 打開 release nbsp 最新 component 轉載請註明文章:Linux下獲取arm的交叉編譯工具鏈 出處:多客博圖 這裏介紹,Linux下獲取arm的交叉編譯工具鏈,比如arm-linux-gnueabihf-gcc、a

geos庫交叉編譯生成ARM平臺庫

linux linu b2c com ron exec 平臺 data get 版本號信息: GEOS:geos-3.4.2.tar.bz2(http://trac.osgeo.org/geos/) CPU:ARM 編譯器:arm-linux 4.2.2