如题,近期在Ubuntu 16.04上编译Android 6.0源码的时候出现报错,记录如下:

我的开发环境:

  • Ubuntu 16.04
  • make 4.0
  • Android M 源码

大致报错如下:

/home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止。

具体如下:

使用 make target-files-package -j4 命令来编译,起初的报错信息如下:

make[2]: *** [drivers/modules.builtin] Error 2make[2]: *** 正在等待未完成的任务....make[2]: *** wait: 没有子进程。 停止。Makefile:145: recipe for target 'sub-make' failedmake[1]: *** [sub-make] Error 2make[1]: Leaving directory '/home/fei/dev/android/source/prada/kernel'kernel/AndroidKernel.mk:132: recipe for target 'out/target/product/prada/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb' failed

由于在编译的时候使用了 -j4 来使用多核进行多线程编译,导致某些报错信息被隐藏,去掉-j4选项重新编译,看到完整报错如下:

/home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止。/home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen/focaltech' failedmake[5]: *** [drivers/input/touchscreen/focaltech] Error 2make[5]: *** 正在等待未完成的任务..../home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen' failedmake[4]: *** [drivers/input/touchscreen] Error 2/home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input' failedmake[3]: *** [drivers/input] Error 2/home/fei/dev/android/source/prada/kernel/Makefile:1116: recipe for target 'drivers/modules.builtin' failedmake[2]: *** [drivers/modules.builtin] Error 2make[2]: *** 正在等待未完成的任务....make[2]: *** wait: 没有子进程。 停止。Makefile:145: recipe for target 'sub-make' failedmake[1]: *** [sub-make] Error 2make[1]: Leaving directory '/home/fei/dev/android/source/prada/kernel'kernel/AndroidKernel.mk:132: recipe for target 'out/target/product/prada/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb' failed

可以看到问题最初的来源在 /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile 文件中的第九行,查看Makefile指定行如下:ldflag obj-y += fts_ts.o ,没有发现什么异常,故怀疑是Ubuntu16.04中自带的make版本过高而Makefile语法没有跟上更新导致make无法正确识别,所以查看make版本为4.0,查看同事能正常编译的make版本为3.8.1,所以安装底版本再次测试,最终成功编译。

安装make 3.8.1

  • 直接在这里下载make 3.8.1
  • 解压
  • cd
  • ./configure
  • make
  • sudo make install

这样能够看到/usr/local/bin/make 就是新安装的make 3.8.1 再次编译的时候明确知名make的版本号就行了,类似于这样/usr/local/bin/make target-files-package -j4问题就解决了

此时make 4.0 版本的位置为/usr/bin/make, 使用的时候指明即可,默认为make 4.0

除了上面直接指明路径外,还可以使用update-alternatives 工具来进行管理,具体怎么使用,还请自行Google。但是我个人觉得直接指明路径是最简单的方式了。

参考

https://askubuntu.com/questions/860066/is-it-any-way-to-temporarily-install-make-3-81

更多相关文章

  1. Android(安卓)- Android(安卓)Studio 自动(auto)添加import 语句
  2. Android使用ksoap2调用C#webservice体会
  3. Android:使用SAX或者DOM或者pull操作XML文件
  4. Android-基本控件(SeekBar 可拖动 滚动条的使用)
  5. 编译Android内核模块
  6. Android(安卓)build system note
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)源码结构【搜集】
  2. 调用C++底层 Thread & Mutex 的注意事项
  3. Android(安卓)之 事件
  4. Android(安卓)Makefile中 如何识别 TARGE
  5. Android(安卓)Toolchain与Bionic Libc
  6. Android(安卓)加速度传感器(G-Sensor)
  7. android sdk manager 无法下载
  8. Android中RelativeLayout各个属性的含义
  9. 【转】Android中对json的解析和处理
  10. AspectJ 在 Android(安卓)中的使用