我可以使用arm-linux-gnueabi-*
工具链为我的Android设备编译文件(例如C或C ++源代码)吗?
我的问题可能看起来有些愚蠢,但是我会得到与使用arm-linux-androideabi-*
工具链编译相同的结果吗?
答案 0 :(得分:14)
编译可能意味着不仅仅是将源代码转换为二进制代码。像GCC这样的编译器也提供了某些库,在这种情况下libgcc用于处理硬件无法处理的内容。当编译器成为工具链时,它还提供由编程语言标准化的运行时库,类似于目标系统中提供的编程语言。在arm-linux-gnueabi-
的情况下可能是libc,而arm-linux-androideabi-
则是bionic。
您可以生成供不同编译器使用的兼容对象文件,这就是elf的用途。
你可以生成静态可执行文件,它的大小可能非常大,而且它们可以在任何匹配的硬件/内核上运行,因为在这种情况下工具链就是为了这个。
但是如果你生成动态可执行文件,那些只能在支持其依赖项的系统上运行。因此,arm-linux-gnueabi-
不是静态构建的简单“hello world”应用程序将无法在Android系统上运行,因为它提供了仿生,而不是libc。