编译环境:ubuntu18.04
软件版本:全志SDK,安卓版本8.1.0,linux-4.9.0
问题描述:
在全志的安卓系统中,需要运行C项目代码,在查找交叉编译工具时,shell里直接arm- tab出来的是arm-linux-androideabi ,
尝试用arm-linux-androideabi 编译了C 的源码,发现报错无法编译
问题分析:
搜索了下这个问题:
编译可能意味着不仅仅是将源代码转换为二进制代码。 像GCC这样的编译器也提供了某些库,在这种情况下, libgcc用于处理硬件无法处理的内容。 当编译器成为工具链时,它还提供由编程语言标准化的运行时库,类似于目标系统中提供的编程语言。 在arm-linux-gnueabi-
的情况下,可能是libc和arm-linux-androideabi-
这是仿生的 。
您可以生成供不同编译器使用的兼容对象文件,这就是精灵的用途。
您可以生成可以大小的静态可执行文件,它们应该适用于任何匹配的硬件/内核,因为在这种情况下工具链的目标就是这样。
但是,如果您生成动态可执行文件,那些只能在支持其依赖项的系统上运行。 因此,一个简单的“hello world”应用程序不是arm-linux-gnueabi-
静态构建将无法在Android系统上运行,因为它提供了仿生而不是libc。
解决方法:
查了资料,C项目需要libc和运行时库支持,所以编译C项目不能用arm-linux-androideabi
在全志的SDK中查找arm-linux-gnueabi
bell@r311:~/r311/lichee/tools/build/toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux/bin$ ls
arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-dwp arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-ld.gold arm-linux-gnueabihf-ranlib
arm-linux-gnueabihf-ar arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gcov arm-linux-gnueabihf-ldd arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-as arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gdb arm-linux-gnueabihf-nm arm-linux-gnueabihf-size
arm-linux-gnueabihf-c++ arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gfortran arm-linux-gnueabihf-objcopy arm-linux-gnueabihf-strings
arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc-4.9.2 arm-linux-gnueabihf-gprof arm-linux-gnueabihf-objdump arm-linux-gnueabihf-strip
arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-ld arm-linux-gnueabihf-pkg-config
arm-linux-gnueabihf-ct-ng.config arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-ld.bfd arm-linux-gnueabihf-pkg-config-real
在makefile里修改编译工具为arm-linux-gnueabi即可!