【发布时间】:2014-05-25 08:36:58
【问题描述】:
假设您有一个为 ARM 架构生成二进制文件的交叉编译工具链。
你的工具链是这样的(运行在带有 Linux 的 X86_64 机器上):
- arm-linux-gnueabi-gcc.exe:用于 Linux 的交叉编译,在 ARM 上运行。
- arm-gcc.exe:用于针对 ARM 的裸机交叉编译。
...以及用于在 ARM 上进行交叉编译的大量其他工具。
我感兴趣的点是:
- (E)二进制文件之间的 ABI 差异(如果有)
- 裸机情况下的限制(如动态内存分配、在 C++ 情况下使用静态构造函数、线程模型等)
- 这两种情况在各自特定信息方面的二进制级别差异(如调试信息支持等);
【问题讨论】:
-
这听起来像是“我的小程序和我的操作系统之间的区别”...
-
@deviantfan:听起来更像是“我可以使用 C/C++ 的所有“正常”特性来进行固件(裸机)开发吗?”在这里阅读这篇文章后:state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf 我注意到了裸机 C/C++ 的一些限制。还有更多(还有差异)吗? :)
-
对于真正的裸机,你需要为newlib写一个可移植层。在 Gnu Linux 上,使用 eglibc 或 glibc。基本上,您的问题是有什么区别。有1000个。你想使用
mmap()吗?等等。二进制/编译器的差异并不重要(大部分)。完全不同的是“C”库。文件 I/O?
标签: c++ linux gcc arm bare-metal