编译问题汇总

来自个人维基
跳转至: 导航搜索

linux driver

/*error*/
include/linux/mmzone.h:18:26: error: linux/bounds.h: No such file or directory
include/linux/mmzone.h:197:5: warning: "MAX_NR_ZONES" is not defined

/*solution*/
bounds.h是在编译内核时生成的,如果运行"make clean" 或 "make distclean",这个文件就会被清除掉(详情查看内核Makefile)。
因此,如果再利用此内核源码编译内核模块,如果有涉及bounds.h,就会出现找不到该文件的错误。
解决办法就是:
"make prepare"
这样就会重新生成bounds.h
/*error*/
target Java: FrameworksCoreSystemPropertiesTests (out/target/common/obj/APPS/FrameworksCoreSystemPropertiesTests_intermediates/classes)
error: error reading out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar; invalid header field
1 error
make: *** [out/target/common/obj/APPS/FrameworksCoreSystemPropertiesTests_intermediates/classes-full-debug.jar] Error 41
/*solution*/
原因是jar打包工具打包的格式不正确导致的,具体修改如下:
$ sudo update-alternatives --config jar
有 3 个候选项可用于替换 jar (提供 /usr/bin/jar)。

  选择       路径                               优先级  状态
------------------------------------------------------------
* 0            /usr/bin/fastjar                      100       自动模式
  1            /usr/bin/fastjar                      100       手动模式
  2            /usr/lib/jvm/java-1.5.0-sun/bin/jar   53        手动模式
  3            /usr/lib/jvm/java-6-sun/bin/jar       63        手动模式

要维持当前值[*]请按回车键,或者键入选择的编号:

此时选择3,注意这个选择需要和你的sudo update-alternatives --config java 里面选择的保持
一致(如果你是sun的jdk就选sun,如果是openjdk就选openjdk的打包jar),负责会出现打包错误,
导致无法编译通过的问题。(默认使用的是fastjar,出现问题)