假設您有一個爲ARM體系結構生成二進制文件的交叉編譯工具鏈。特定操作系統(Linux)的C/C++裸機編譯和編譯有什麼區別?
你的工具鏈是這樣的(與Linux上X86_64機器上運行):
- ARM-Linux的gnueabi-gcc.exe:爲交叉編譯的Linux,ARM上運行。
- arm-gcc.exe:針對ARM的裸機交叉編譯。
......以及其他許多ARM上交叉編譯工具。
點即我感興趣的是:
- 二進制之間(E)ABI差異(如果有的話)在裸金屬的情況下
- 限制(如動態存儲器分配,靜態構造的使用在C++的情況下,線程模型等)
- 2個案例之間的二進制級別的差異,特定於每個信息(如調試信息支持等);
這聽起來像「我的小程序和我的操作系統之間的差異」... – deviantfan
@deviantfan:聽起來更像「我可以使用我習慣用於固件的C/C++的所有」常規「功能裸機)發展?「 閱讀這篇文章後:http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf我注意到裸金屬C/C++的一些限制。是否還有更多(和差異)? :) – Liviu
對於*真正裸機*,您需要爲* newlib *編寫可移植層。在Gnu Linux上,* eglibc *或[* glibc *](http://en.wikipedia。org/wiki/GNU_C_Library)。基本上,你的問題是什麼區別。有1000多個。你想使用'mmap()'?等二進制/編譯器差異並不重要(大部分)。這是'C'庫完全不同。文件I/O? –