鴻蒙系統編譯第乙個APP hello

2021-10-10 00:18:40 字數 2000 閱讀 7799

版本

日期作者

說明v1

2020

韋東山技術文件

我們在ubuntu中給pc機編譯程式時,執行這樣的命令:

gcc  -o  hello   hello.c
我們在ubuntu給arm板編譯程式時,執行這樣的命令(gcc字首可能不一樣):

arm-linux-gcc  -o  hello   hello.c
在liteos-a中,使用llvm來編譯程式。llvm的本意是「low level virtual machine」,乙個底層的虛擬機器。但是它現在已經發展成了一種編譯器(compiler)的框架系統。簡單地說,llvm可以取代gcc,llvm容易擴充套件,可以提供更好的效能。

llvm的框架如下:

clang是「frontend」(前端),用來執行詞法分析、語法分析,簡單地說就是:檢查語法錯誤、包含標頭檔案、擴充套件巨集。

中間是優化器,把前端分析好的**轉換為llvm ir(中間表示,intermediate representation),ir與機器無關,可以很方便地新增一系列的優化。

優化後得到的ir,再由「backend」(後端)轉換為各種機器的機器碼。

以上內容來自網路,我對clang、llvm理解不深,簡單介紹一下而已。

使用clang時,我們要指定很多引數:為哪類cpu編譯程式(arm還是risc-v),cpu架構是什麼(cortex a7還是cortex a15),標頭檔案/庫檔案在哪?

在為liteos-a編譯程式時,以hello程式為例,可以執行以下命令:

clang -target arm-liteos --sysroot=

/home/book/openharmony/prebuilts/lite/sysroot/ \

-o hello hello.c

上述命令的sysroot引數中,指定有標準標頭檔案、庫檔案的目錄。

還可以像gcc一樣使用「-i」、「-l」引數指定其他標頭檔案的目錄、庫檔案的目錄,比如後面會編譯這個程式:

clang -target arm-liteos --sysroot=

/home/book/openharmony/prebuilts/lite/sysroot/ \

-i /home/book/openharmony/third_party/freetype/include \

-l /home/book/openharmony/out/ipcamera_hi3518ev300/libs/usr \

-lfreetype \

-o show_line show_line.c

編譯出hello程式後,可以把它放入rootfs目錄下的bin字母,比如:

cp hello /home/book/openharmony/kernel/liteos_a/out/imx6ull/rootfs/bin

然後重新製作rootfs.jffs2,執行以下命令:

> cd  /home/book/openharmony/kernel/liteos_a/out/imx6ull/ mkfs.jffs2  -s

>

0x10000

-e 0x10000

-d rootfs -o rootfs.jffs2

把得到的rootfs.jffs2放到燒寫工具的files目錄,就可以使用燒寫工具啟動了:

進入命令列後,就可以執行hello程式了,如下圖所示:

注意:必須用「./bin/hello」,不能用絕對路徑「/bin/hello」

編譯第乙個檔案

apue中有很多例項,比如第4頁中圖1 3中描述了乙個簡單的類似ls命令的c程式。幾乎所有例子都會引用乙個apue.h標頭檔案。這個標頭檔案是作者自己實現的,起到遮蔽平台相關實現的作用。直接編譯圖1 3中的程式是沒法通過的,因為缺少apue.h這個標頭檔案。那該怎麼編譯這個例項呢?需要做下面幾件事情...

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...

linux第乙個驅動模組編譯

我們的源程式是乙個簡單的程式 include include module license dual bsd gpl static int hello init void static void hello exit void module init hello init module exit h...