求助,gcc编译找不到头文件Android平台时不到新添加的类

您所在的位置: &
Android编译系统中头文件搜索路径的顺序问题
Android编译系统中头文件搜索路径的顺序问题
我爱咸蛋黄
Android编译系统本身设置了一堆公共的头文件搜索路径,然后允许每个项目在自己的Android.mk中通过LOCAL_C_INCLUSES 来添加独特的搜索路径。
今天在编译一个代码时发现Android编译系统在设置头文件搜索路径的顺序上好像有些问题。Android编译系统本身设置了一堆公共的头文件搜索路径(参见pathmap.mk中pathmap_INCL的定义),然后允许每个项目在自己的Android.mk中通过LOCAL_C_INCLUSES 来添加独特的搜索路径。按照一般的想法,在最后的编译参数中,项目自己独特的搜索路径应该放在公共搜索路径之前,这样,一旦出现头文件名冲突的情况,会优 先使用项目自己指定的头文件。但是在Android的编译系统中情况并非如此,项目自定义的头文件搜索路径反而被放在了最后。参见 definitions.mk文件里的下面这个定义:
define&transform-cpp-to-o&@mkdir&-p&$(dir&$@)&@echo&&target&$(PRIVATE_ARM_MODE)&C++:&$(PRIVATE_MODULE)&&=&$&&&$(hide)&$(PRIVATE_CXX)&\&&&&&$(foreach&incdir,&\&&&&&&&&&$(if&$(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,&\&&&&&&&&&$(TARGET_PROJECT_INCLUDES)&\&&&&&&&&&$(TARGET_C_INCLUDES)&\&&&&&&&&&&)&\&&&&&&&&&$(PRIVATE_C_INCLUDES)&\&&&&&&&,&\&&&&&&&&&-I&$(incdir)&\&&&&&&)&\&&&&&-c&\&&&&&$(if&$(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,&\&&&&&&&&&$(TARGET_GLOBAL_CFLAGS)&\&&&&&&&&&$(TARGET_GLOBAL_CPPFLAGS)&\&&&&&&&&&$(PRIVATE_ARM_CFLAGS)&\&&&&&&)&\&&&&&-fno-rtti&\&&&&&$(PRIVATE_CFLAGS)&\&&&&&$(PRIVATE_CPPFLAGS)&\&&&&&$(PRIVATE_DEBUG_CFLAGS)&\&&&&&-MD&-o&$@&$&&$(hide)&$(transform-d-to-p)&endef&
这个定义就是编译C++文件使用的命令行。注意红字部分,PRIVATE_C_INCLUDES中包含了项目的LOCAL_C_INCLUDES的定义 (参见binary.mk)。明显项目自定义的搜索路径被放在了最后。后面还有C文件的编译命令行的定义(define
transform-c-or-s-to-o-no-deps)也同样如此。
不知道Android这样设计是出于什么考虑。我尝试把顺序调整一下,看是否会影响Android的编译。上述定义调整之后如下:
define&transform-cpp-to-o&@mkdir&-p&$(dir&$@)&@echo&&target&$(PRIVATE_ARM_MODE)&C++:&$(PRIVATE_MODULE)&&=&$&&&$(hide)&$(PRIVATE_CXX)&\&&&&&$(foreach&incdir,&\&&&&&&&&&$(PRIVATE_C_INCLUDES)&\&&$(if&$(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,&\&&&&&&&&&$(TARGET_PROJECT_INCLUDES)&\&&&&&&&&&$(TARGET_C_INCLUDES)&\&&&&&&&&&&)&\&&&&&&&,&\&&&&&&&&&-I&$(incdir)&\&&&&&&)&\&&&&&-c&\&&&&&$(if&$(PRIVATE_NO_DEFAULT_COMPILER_FLAGS),,&\&&&&&&&&&$(TARGET_GLOBAL_CFLAGS)&\&&&&&&&&&$(TARGET_GLOBAL_CPPFLAGS)&\&&&&&&&&&$(PRIVATE_ARM_CFLAGS)&\&&&&&&)&\&&&&&-fno-rtti&\&&&&&$(PRIVATE_CFLAGS)&\&&&&&$(PRIVATE_CPPFLAGS)&\&&&&&$(PRIVATE_DEBUG_CFLAGS)&\&&&&&-MD&-o&$@&$&&$(hide)&$(transform-d-to-p)&endef&&
transform-c-or-s-to-o-no-deps也做类似调整。重新编译后发现只有webkit的编译有问题。原因在于webkit的代码中 包含了几个STL的头文件(WebKit/android/stl),特别是其中的strings与bionic定义的头文件冲突,在调整头文件搜索顺序 后,优先选择了这个文件。这个strings文件其实是一个空文件(除了注释没有任何语句),干脆删除了它,果然编译顺利进行了,一直到编译完成再也没有 出现问题。看来上述调整时可行的。我用的android源代码版本是2.0,其它版本没有试过不知道怎么样。BTW,如果想在编译时打印出编译命令,在make的参数中加上SHOW_COMMANDS=1即可。【编辑推荐】【责任编辑: TEL:(010)】
关于&&的更多文章
Android 4.4即将发布,这对大家来说都是很期待的,当然,无论是
大家都知道iOS的发展之迅速,这对于开发者来说,无疑
越来越多的web设计师提出了移动优先的口号,而随着硬
北京时间日,苹果在加利福尼亚召开新品发
本书是按照全国计算机技术与软件专业技术资格(水平)考试《软件设计师考试大纲》的要求,参照《软件设计师教程》及近年来考试试
Windows Phone专家
Android开发专家
51CTO旗下网站后使用快捷导航没有帐号?
查看: 604|回复: 6
求助------编译android电脑死机,谢啦!!!!
东芝笔记本电脑,原来内存是2G的然后扩充了联想的2G内存卡,也就是达到了4G内存了,ubuntu10.04系统。平台是.
编译的时候显示编译环境已经OK了,一直编译到kernel完还正常,到了就编译了3多个小时还没完。最后干脆死机进入开机界面了。
为啥呢难道我的内存还不够?还出了其他啥问题?
有没有遇到过类似情况的朋友。请多多指教!谢谢。
你这配置 没有4个小时 编译的完吗?
你是虚拟机的吗?是WIN XP还是WIN7下面的虚拟机?
你这配置 没有4个小时 编译的完吗?
问题在于没编译完就挂掉了 %&_&%
为毛?难道真的是内存原因?
你是虚拟机的吗?是WIN XP还是WIN7下面的虚拟机?
WIN7、 ubuntu双系统
不是虚拟机
不是虚拟机
应当不是内存大小问题,当然还有可能是内存相互不兼容也有可能,现在内存条也不能100%保证,另外,可以重新在remake试一下,看看能不能编译过去。
你可以打开系统监控时实看看内存的使用情况。
看看会不会将内存全部使用完的情况。
还有系统的SWAP是不是设置得太少了?
论坛资料为网友自由上传,与本论坛无关。
Powered by
关注一牛微信
获取手机验证码东坡下载:内容最丰富最安全的下载站!
→ android5.0什么时候出来 安卓5.0新特性有哪些
作者:佚名点击:64次评论:0次标签:
V7.417(内带注册机)
类型:系统增强大小:6.5M语言:中文 评分:8.8
  早前就有很多朋友在问谷歌什么时候发布android5.0,值得开心的是,今日凌晨谷歌就发布了安卓5.0系统,并把最新的安卓5.0命名为Android Lollipop,即安卓棒棒糖。不过android5.0有哪些新特性呢?下面东坡小编就给大家说说android5.0什么时候出来,安卓5.0新特性有哪些。  距离Android系统上一次重大更新不到一年的时间,谷歌再一次从KitKat升级到了Lollipop,而两次都使用糖果来命名,营销的目的显露无遗。当我们首次看到Android 5.0 Lollipop这个名字的时候,就已经意识到这将是Android系统有史以来变化最大的一次升级。  首先,在感官界面设计上,我们彻底迎来了Android系统的扁平化时代,新的系统不仅使用了新的配色,同时看起来也很时尚。未来我们相信包括三星的TouchWiz或LG的Optimus自定义UI都会遵循Lollipop的新风格。此外,谷歌全面改善了原来乏味的通知中心,让原生系统也拥有了像第三方插件那样强大的功能。另外,多任务系统也加入了更多的卡片式风格,同时还有大量的其它新特性,包括64位编译器和增强电池续航能力能。目前,除了Nexus设备之外,包括摩托罗拉、HTC等都表示旗下的智能手机大部分都支持升级到Android Lollipop,相信不就的将来我们将迎来一阵升级的热潮。  Android 5.0 Lollipop新增的十个最主要变化  1、全新Material Design设计风格  Android Lollipop全新的设计语言是受到了多种因素影响,是一种大胆的平面化创新。换句话说,谷歌希望能够让Material Design给用户带来纸张化的体验。新的视觉语言,在基本元素的处理上,借鉴了传统的印刷设计,字体版式、网格系统、空间、比例、配色、图像使用等这些基础的平面设计规范。  另外,Material Design还推崇实体隐喻理念,利用实体的表面与边缘的质感打造出视觉线索,让用户感受到真实。熟悉的触感让用户可以快速的理解、认知。在设计中可以灵活的运用物质,在符合物理规律的基础上,打造出不同的使用体验。最后是是有意义而且更合理的动态效果,为了吸引用户的注意力,以及维持整个系统的连续性体验。  2、支持多种设备  现在无论是智能手机、平板电脑、笔记本电脑、智能电视、汽车、智能手表甚至是各种家用电子产品,谷歌的Android系统已经可以在所有设备的屏幕上出现。而这一概念与微软不谋而合,之前微软也宣布将会把Windows 10打造成跨设备跨平台的统一系统,帮助自己走出困境。  3、全新的通知中心设计  谷歌在Android Lollipop中加入了全新风格的通知系统。改进后的通知系统会优先显示对用户来说比较重要的信息,而将不太紧急的内容隐藏起来。用户只需要向下滑动就可以查看全部的通知内容。  新的通知系统另外一个很酷的新功能是在锁屏界面也可以直接查看通知消息了。不仅如此,用户还可以直接在锁屏的情况下就行回复或进入应用。另外,如果在操作手机的过程中有电话进入,也不会进行全画面切换,而是同样以弹出通知的方式告知用户。  4、支持64位ART虚拟机  新系统不仅在视觉效果上带来了巨大的变化,Android Lollipop还在内部的性能上进行了飞跃。首先,新系统放弃了之前一直使用的Dalvik虚拟机,改用了ART模式,实现了真正的跨平台编译,在ARM、X86、MIPS等,无处不在。  ART虚拟机编译器在内存占用及应用程序加载时间上进行了大幅提升,谷歌承诺所有性能都会比原来提升一倍。另外,对64位的支持也让ART虚拟机如鱼得水,开发者可以针对像ARM Cortex-A57这样的64位架构核心开发应用程序。  Android Lollipop支持更大的寄存器,支持新的指令集,提升了内存寻址空间,未来Android智能手机将支持4GB以上的内存。  5、Project Volta电池续航改进计划  Project Volta计划增加了新工具可以让开发者能够更容易的找出为何自己的应用程序会对电量产生比较大的影响,同时确保在执行某型任务时将手机电量的影响降至最低。首先,Battery Historian可以列出手机电量消耗的详细情况,帮助开发者识别电量消耗的原因或者是哪个硬件或任务对电池寿命的影响比较大;而Job Scheduler API则可以让开发者更容易的选择合适的时机触发电量消耗比较高的任务,避免在低电量或未完成充电时更新应用程序。  上面是针对开发者的改进,而在用户层面上,Android Lollipop增加了Battery Saver模式,这与三星和HTC上的超级省电模式有些类似。在低电量的时候系统会自动降低屏幕亮度、限制自动更换背景等功能。  6、全新的“最近应用程序”  除了界面风格设计的改变之外,新的最近应用界面还借鉴了Chrome浏览器的理念,采用单独的标签展示方式。更重要的是,谷歌已经向开发者开放了API,所以第三方开发人员可以利用这个改进为特定的应用增加全新的功能。  7、改进安全性  现在个人识别解锁还是一个比较新鲜的智能概念,当用户的蓝牙耳机连接到手机或平板电脑时,设备可以基于当前的位置或用户的声音自动解锁。比如当特定的智能手表出现在Android设备的附近,那么就会直接绕过锁屏界面进行操作。而Android Lollipop也增加了这种针对特定特任识别解锁的模式。换句话说,当设备没有检测到附近有可用的信任设备时,就会启动安全模式防止未授权访问。  另外,Android Lollipop还默认开启了系统数据加密功能,并且通过SELinux执行应用程序,这就意味着对于恶意软件来说,新系统变得更加安全。  8、不同数据独立保存  谷歌表示Android Lollipop将拥有一个全新的特性,让用户通过一台设备就可以搞定所有的工作和生活娱乐活动。该特性首先将各种数据独立保存,并且让所有新数据的生成都有依据。  我们已经看到谷歌已经与三星加强了合作,包括三星的Knox安全系统同样可以像Android Lollipop一样将重要数据和其它数据分开保存。另外谷歌还允许向三星以外的Android设备提供支持。  9、改进搜索  谷歌将新系统的搜索功能重点放在了“重新发现”上,因此这意味着Google Search将会更好的意识到用户正在做什么。比如系统会根据用户当前的位置自动过滤无关的搜索结果。  另外,当用户在进行应用搜索时,可以直接展示相似或部分提示,并且进入特定的应用程序而无需将内容全部输入。  10、新的API支持,蓝牙4.1、USB Audio、多人分享等其它特性  Android Lollipop还增加了多个新的API支持、蓝牙4.1、USB Audio外接音响及多人分享等功能。其中多人分享功能可以在用户手机丢失的情况下,使用其它Lollipop设备登录账户,从云端下载联系人、日历等资料,并且不影响其它设备的内容。
电脑版相关软件
手机版相关软件
10-2710-2710-2410-2410-2410-2410-1410-1410-1410-14
阅读本文后您有什么感想? 已有
人给出评价!
本类常用软件
名称大小下载
1 下载量:584305
2 下载量:432976
3 下载量:366977
4 下载量:365800
5 下载量:340601求解答,Android源码编译时怎样添加第三方jar包  各位大神好,遇到的问题如标题。
  我用Eclipse写了一个android工程,但是这个工程需要到SDK的隐藏类,所有想在源码下编译,但是每次mm之后,都会出现错误,提示是找不到对应的类。
  我需要加入的4个jar包如下:
  ordec-1.7.0.jar
  org.knopflerfish.bundle.kxml-LIB-2.3.0.jar
  osgi.cmpn-4.3.0.jar
  osgi.core-4.3.0.jar
  望各位大神支招。小弟在线等...
  经过了昨晚的研究,我最后还是找到了解决方法,因为之前自己没有写过Android.mk文件,所以不知道怎么加载jar包是很正常的。
  在源码下编译android工程使用到第三方jar包需要在Android.mk文件中添加java静态库的目录。主要用到了Android.mk文件中的两个变量。
  LOCAL_STATIC_JAVA_LIBRARIES 和&LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES,就是需要加载静态库。这里我粘贴我的Android.mk文件
  Android.mk
  LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
# Added for source code compile start 为jar起一个别名
LOCAL_STATIC_JAVA_LIBRARIES :=
jarlib1 jarlib2 jarlib3 jarlib4
LOCAL_PACKAGE_NAME := yourprojectname
# Added for source code compile end
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Added for source code compile start 冒号前面为jar别名,后面为jar文件的实际路径
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := jarlib1:jars/ordec-1.7.0.jar
jarlib2:jars/org.knopflerfish.bundle.kxml-LIB-2.3.0.jar jarlib3:jars/osgi.cmpn-4.3.0.jar jarlib4:jars/osgi.core-4.3.0.jar
include $(BUILD_MULTI_PREBUILT)
# Added for source code compile end
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
  这里就有两个问题:
  第一:jar文件放在android工程的哪里?
  答案是随便放在哪里! 这里举个例子,比如我放在工程主目录下的jars文件夹下面,那么我在定义变量LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES值的时候就需要指定一个路径,即jars/。
  第二:我在mk文件中怎样引用?
  可以看到mk文件中比一般的mk文件增加了两个变量
  第一个LOCAL_STATIC_JAVA_LIBRARIES即java静态库,这里我们只需要取个名字就好,具体库对应的库文件需要在LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES中去加载即可。至于LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES的值应该怎么写,看mk文件有提示。
  初学android源码编译,是会遇到很多问题,慢慢来。}

我要回帖

更多关于 mex 找不到编译器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信