第三章 編譯第一個APP:hello
1.1 Clang、LLVM與GCC介紹
我們在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理解不深,簡單介紹一下而已,
1.2 編譯hello程式
使用Clang時,我們要指定很多引數:為哪類CPU編譯程式(ARM還是Risc-V),CPU架構是什么(cortex A7還是cortex A15),頭檔案/庫檔案在哪?
在為Liteos-a編譯程式時,以hello程式為例,可以執行以下命令:
cd /home/book/openharmony_for_imx6ull/apps/hello
clang -target arm-liteos --sysroot=/home/book/openharmony/prebuilts/lite/sysroot/ \
-o hello hello.c
上述命令的sysroot引數中,指定有標準頭檔案、庫檔案的目錄,
還可以像GCC一樣使用“-I”、“-L”引數指定其他頭檔案的目錄、庫檔案的目錄,比如后面會編譯這個程式:
cd /home/book/openharmony_for_imx6ull/apps/freetype
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
1.3 把hello程式放入rootfs
編譯出hello程式后,可以把它放入rootfs目錄下的bin字母,比如:
cd /home/book/openharmony_for_imx6ull/apps/hello
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
假設hello程式位于/home/book/apps/hello目錄下,操作截圖如下:

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

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

注意:必須用“./bin/hello”,不能用絕對路徑“/bin/hello”
全文下載
技術交流群(鴻蒙開發/Linux/嵌入式/驅動/資料下載)
QQ群:869222007
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/92147.html
標籤:其他
上一篇:安裝Ubuntu1804+cuda10.1+cudnn7.5.1流程
下一篇:Linux好玩的小命令
