错误:'clang'不是名称空间名称

时间:2012-12-07 14:08:06

标签: c++ llvm

我从here.获取这些代码。按照步骤操作。但是当我make

时会出错
using namespace clang;
int main()
{
    CompilerInstance ci;
    ci.createDiagnostics(0,NULL); // create DiagnosticsEngine
    ci.createFileManager();  // create FileManager
    ci.createSourceManager(ci.getFileManager()); // create SourceManager
    ci.createPreprocessor();  // create Preprocessor
    const FileEntry *pFile = ci.getFileManager().getFile("hello.c");
    ci.getSourceManager().createMainFileID(pFile);
    ci.getPreprocessor().EnterMainSourceFile();
    ci.getDiagnosticClient().BeginSourceFile(ci.getLangOpts(), &ci.getPreprocessor());
    Token tok;
    do {
        ci.getPreprocessor().Lex(tok);
        if( ci.getDiagnostics().hasErrorOccurred())
            break;
        ci.getPreprocessor().DumpToken(tok);
        std::cerr << std::endl;
    } while ( tok.isNot(clang::tok::eof));
    ci.getDiagnosticClient().EndSourceFile();
}

Makefile

    CXX := g++
    RTTIFLAG := -fno-rtti
    CXXFLAGS := $(shell llvm-config --cxxflags) $(RTTIFLAG)
    LLVMLDFLAGS := $(shell llvm-config --ldflags --libs)
    DDD := $(shell echo $(LLVMLDFLAGS))
    SOURCES = main.cpp
    OBJECTS = $(SOURCES:.cpp=.o)
    EXES = $(OBJECTS:.o=)
    CLANGLIBS = \
            -L /usr/local/lib \
            -lclangFrontend \
            -lclangParse \
            -lclangSema \
            -lclangAnalysis \
            -lclangAST \
            -lclangLex \
            -lclangBasic \
            -lclangDriver \
            -lclangSerialization \
            -lLLVMMC \
            -lLLVMSupport \
    all: $(OBJECTS) $(EXES)
    %: %.o
    $(CXX) -o $@ $< $(CLANGLIBS) $(LLVMLDFLAGS)

make时收到的错误消息。

g++ -I/usr/include  -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS   -fvisibility-inlines-hidden -fno-exceptions -fPIC -Woverloaded-virtual -Wcast-qual -fno-rtti   -c -o main.o main.cpp
main.cpp:1:21: error: ‘clang’ is not a namespace-name
main.cpp:1:26: error: expected namespace-name before ‘;’ token
main.cpp: In function ‘int main()’:
main.cpp:4:9: error: ‘CompilerInstance’ was not declared in this scope
main.cpp:4:26: error: expected ‘;’ before ‘ci’
main.cpp:5:9: error: ‘ci’ was not declared in this scope
main.cpp:5:32: error: ‘NULL’ was not declared in this scope
main.cpp:9:15: error: ‘FileEntry’ does not name a type
main.cpp:10:48: error: ‘pFile’ was not declared in this scope
main.cpp:13:9: error: ‘Token’ was not declared in this scope
main.cpp:13:15: error: expected ‘;’ before ‘tok’
main.cpp:15:38: error: ‘tok’ was not declared in this scope
main.cpp:19:13: error: ‘cerr’ is not a member of ‘std’
main.cpp:19:26: error: ‘endl’ is not a member of ‘std’
main.cpp:20:19: error: ‘tok’ was not declared in this scope
main.cpp:20:29: error: ‘clang’ has not been declared
make: *** [main.o] Error 1

我是C ++的新手。如果这个问题太简单,我很抱歉。提前致谢。

2 个答案:

答案 0 :(得分:2)

您需要#include相应的头文件,以便引用您尝试使用的API的成员。

答案 1 :(得分:2)

您是否在实施文件中包含了相关标题,例如:

#include <CompilerInstance.h>