当前位置:编程学习 > wap >>

一个关于android源代码编译的问题!详细如下。。求高手指点

out/host/linux-x86/obj/STATIC_LIBRARIES/libclangSema_intermediates/libclangSema.a(SemaTemplateVariadic.o): In function `clang::Sema::ActOnPackExpansion(clang::ParsedTemplateArgument const&, clang::SourceLocation)':
/home/river/android-4.0/external/clang/lib/Sema/SemaTemplateVariadic.cpp:367: undefined reference to `clang::ParsedTemplateArgument::getTemplatePackExpansion(clang::SourceLocation) const'
out/host/linux-x86/obj/STATIC_LIBRARIES/libclangSema_intermediates/libclangSema.a(SemaTemplateVariadic.o): In function `clang::Sema::getNumArgumentsInExpansion(clang::QualType, clang::MultiLevelTemplateArgumentList const&)':
/home/river/android-4.0/external/clang/lib/Sema/SemaTemplateVariadic.cpp:595: undefined reference to `clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*)'
out/host/linux-x86/obj/STATIC_LIBRARIES/libclangSema_intermediates/libclangSema.a(SemaType.o): In function `clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType, clang::PartialDiagnostic const&, std::pair<clang::SourceLocation, clang::PartialDiagnostic>)':
/home/river/android-4.0/external/clang/lib/Sema/SemaType.cpp:3906: undefined reference to `clang::Sema::getTemplateInstantiationArgs(clang::NamedDecl*, clang::TemplateArgumentList const*, bool, clang::FunctionDecl const*)'
/home/river/android-4.0/external/clang/lib/Sema/SemaType.cpp:3906: undefined reference to `clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::TemplateSpecializationKind, bool)'
/home/river/android-4.0/external/clang/lib/Sema/SemaType.cpp:3894: undefined reference to `clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool)'
out/host/linux-x86/obj/STATIC_LIBRARIES/libclangSema_intermediates/libclangSema.a(SemaType.o): In function `clang::Sema::RequireCompleteExprType(clang::Expr*, clang::PartialDiagnostic const&, std::pair<clang::SourceLocation, clang::PartialDiagnostic>)':
/home/river/android-4.0/external/clang/lib/Sema/SemaType.cpp:3814: undefined reference to `clang::Sema::InstantiateStaticDataMemberDefinition(clang::SourceLocation, clang::VarDecl*, bool, bool)'
out/host/linux-x86/obj/STATIC_LIBRARIES/libclangSema_intermediates/libclangSema.a(SemaType.o): In function `clang::Sema::BuildArrayType(clang::QualType, clang::ArrayType::ArraySizeModifier, clang::Expr*, unsigned int, clang::SourceRange, clang::DeclarationName)':
/home/river/android-4.0/external/clang/lib/Sema/SemaType.cpp:1328: undefined reference to `clang::Sema::isSFINAEContext() const'
/home/river/android-4.0/external/clang/lib/Sema/SemaType.cpp:1301: undefined reference to `clang::Sema::isSFINAEContext() const'
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/llvm-rs-cc] 错误 1

    上面的这个编译错误是:我在VMware上装的ubuntu10.04系统下编译android4.0.1源代码出现的,我在网上找了很多资料(包括国外的一些论坛里的资料),大多数都是说因为ubuntu系统的内存小了,硬盘空间不够。虽然我是在虚拟机上,可我给虚拟机的配置是:内存2G,硬盘空间:100G,而且我根据android官方的指导,我将swap的大小都设置的是20G。为了验证系统内存和swap的使用情况,我在编译的时候开启了系统监测,下面是我的监测图:

    编译的时候我一直在看监测图,我发现在最耗内存的时候,swap的空间才被使用一点,然而那个时候根本没有出错,而这个错误的产生是在内存使用率不是很高的情况下出现的。我自己的理解:这个错误会不会跟系统内存的配置没有关系
    我自己想到的另外一个方法就是:会不会是我自己的编译环境有问题(但是我不太相信,因为之前我配置的环境成功的完成了以前的源码编译),但是为了排除这个问题,我又重新的按照官方的要求设定了编译的环境。但是结果还是一样出现上面的错误。
    我也去研究了在错误前面的那些编译信息,说实话我感觉前面的那些信息有点奇怪,都是关于external/clang的问题,但是我没有修改过跟其相关的代码啊,也没研究出结果来。
    我实在没有办法了,自己又是个菜鸟,所以发帖求助,有没有那个高手帮帮忙啊,在此先谢谢了!


--------------------编程问答-------------------- 百度回答过你了。再次贴出来:

没折腾过,没法具体帮你。

能说的是:

试试,有没有,make distclean之类的,彻底清除一下。

然后另外,再重新完整编译一次,遇到错误。

还是先去google搜,然后尽量自己分析,最终找到问题根源,再解决掉。

比如,针对你这里的错误,去google中搜:

undefined reference to isSFINAEContext()

结果可以找到那个:

clang: clang::Sema Class Reference

然后可以找到对应的函数是:

llvm::Optional< TemplateDeductionInfo * > Sema::isSFINAEContext    (      )    const   

所以,就知道是llvm这个东西,实现了你此处所需要的isSFINAEContext函数的。

如此下去,一点点,找到具体如何把llvm的东西,集成过来。

。。。

总之就一个办法:

根据具体问题,利用自己的分析和google,一点点解决掉。 --------------------编程问答-------------------- 后来搜:
isSFINAEContext

找到了某个实现:
SemaTemplateInstantiate.cpp - unladen-swallow
自己去看看吧。 --------------------编程问答-------------------- 还有一个,貌似是你需要的:
SemaTemplateInstantiate.cpp - Open Source --------------------编程问答-------------------- 1.查看你的系统里面的swappiness
$ cat /proc/sys/vm/swappiness
不出意外的话,你应该看到是 60
2.修改swappiness值为10
$ sudo sysctl vm.swappiness=10
但是这只是临时性的修改,在你重启系统后会恢复默认的60,所以,还要做一步:
$ vim  /etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10
按上面这步骤把swap的使用率降低

http://kernel.ubuntu.com/~kernel-ppa/mainline/
这里可以拿到ubuntu最新的内核 --------------------编程问答-------------------- 楼上的很专业,学习一下
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,