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的问题,但是我没有修改过跟其相关的代码啊,也没研究出结果来。
    我实在没有办法了,自己又是个菜鸟,所以发帖求助,有没有那个高手帮帮忙啊,在此先谢谢了!

解决方案 »

  1.   

    百度回答过你了。再次贴出来:没折腾过,没法具体帮你。能说的是:试试,有没有,make distclean之类的,彻底清除一下。然后另外,再重新完整编译一次,遇到错误。还是先去google搜,然后尽量自己分析,最终找到问题根源,再解决掉。比如,针对你这里的错误,去google中搜:undefined reference to isSFINAEContext()结果可以找到那个:clang: clang::Sema Class Reference然后可以找到对应的函数是:llvm::Optional< TemplateDeductionInfo * > Sema::isSFINAEContext    (      )    const   所以,就知道是llvm这个东西,实现了你此处所需要的isSFINAEContext函数的。如此下去,一点点,找到具体如何把llvm的东西,集成过来。总之就一个办法:根据具体问题,利用自己的分析和google,一点点解决掉。
      

  2.   

    后来搜:
    isSFINAEContext找到了某个实现:
    SemaTemplateInstantiate.cpp - unladen-swallow
    自己去看看吧。
      

  3.   

    还有一个,貌似是你需要的:
    SemaTemplateInstantiate.cpp - Open Source
      

  4.   

    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最新的内核