網路城邦
上一篇 回創作列表 下一篇  字體:
cross compile 交叉編譯
2020/09/15 11:00:18瀏覽90|回應0|推薦0
//---

asm/C 編譯

//---

編譯有2種

non-OS (ex, MCU,8051,arduino)

OS

//---

non-OS:

compiler,將[.c]譯成[.o]

linker,將多個[.o]組成[.hex]


OS:

compiler,將[.c]譯成[.o]

linker,將多個[.o]組成[.exe]

//----

Makefile

//---

DOS_asm:

[.com][.exe]:compiler+linker.

DOS_C:

[.exe]:compiler+linker.

//---

compiler,將[.c]譯成[.o]時, 

[.c]若有用到外部定義的結構或函數(ex:printf),會需要[.h]告知架構.

所以需要知道OS的[.h]字典在何處.


linker,將多個[.o]組成[.exe]時,

若有始用到外部定義的函數,會連結相關函數,

連結方式有分二種,靜態連結[.a]及動態連結[.so]

靜態連結:複製靜態函式庫的程式碼到[.exe]內,

動態連結:程式被OS執行時,OS會幫忙找到[.exe]內,指定的[.so]檔,並執行[.so]檔內,指定的函數。


//---

在x86-windows機台,產出x86-windows的程式.(visual studio / console app / hello world)

在x86-linux-ubuntu機台,產出x86-linux-ubuntu的程式.

//---

Cross compile:

在A款CPU機台上,產出B款CPU的程式.

ex,在x86-windows機台(host),產出arduino的程式(target)(non-OS).

ex,在x86-windows機台(host),產出ARM-linux的程式(target)(OS).

//---

若,在x86-windows機台(host),產出ARM-linux的程式(target)

編譯[.c]時,需要參考arm-linux的[.h]字典

組[.exe]時,需要知道,

靜態連結:靜態函式庫[.a]的倉庫路徑,複製所需的程式碼到[.exe]內,

動態連結:之後執行,需要連結的動態函式庫檔名,記到[.exe]內.

//---
( 不分類不分類 )
回應 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=greatcat&aid=150681235