版本
日期作者
說明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...