arm-linux-gnueabi toolchain vs arm-linux-androideabi toolchain。

时间:2014-03-29 15:41:12

标签: linux compilation android-ndk toolchain

我可以使用arm-linux-gnueabi-*工具链为我的Android设备编译文件(例如C或C ++源代码)吗?

我的问题可能看起来有些愚蠢,但是我会得到与使用arm-linux-androideabi-*工具链编译相同的结果吗?

1 个答案:

答案 0 :(得分:14)

编译可能意味着不仅仅是将源代码转换为二进制代码。像GCC这样的编译器也提供了某些库,在这种情况下libgcc用于处理硬件无法处理的内容。当编译器成为工具链时,它还提供由编程语言标准化的运行时库,类似于目标系统中提供的编程语言。在arm-linux-gnueabi-的情况下可能是libc,而arm-linux-androideabi-则是bionic

您可以生成供不同编译器使用的兼容对象文件,这就是elf的用途。

你可以生成静态可执行文件,它的大小可能非常大,而且它们可以在任何匹配的硬件/内核上运行,因为在这种情况下工具链就是为了这个。

但是如果你生成动态可执行文件,那些只能在支持其依赖项的系统上运行。因此,arm-linux-gnueabi-不是静态构建的简单“hello world”应用程序将无法在Android系统上运行,因为它提供了仿生,而不是libc。