字體:小 中 大 | |
|
|
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]內.
//---
|
|
( 不分類|不分類 ) |