2011-12-22 8 views
1

この.ccpファイルをコンパイルしようとしています。私はhttps://github.com/loarabia/Clang-tutorialからそれを得た。gangを使用してclang/llvmでリンクに失敗する

// This code is licensed under the New BSD license. 
// See LICENSE.txt for more details. 
#include <iostream> 

#include "llvm/Support/raw_ostream.h" 
#include "llvm/Support/Host.h" 
#include "llvm/ADT/IntrusiveRefCntPtr.h" 

#include "clang/Frontend/DiagnosticOptions.h" 
#include "clang/Frontend/TextDiagnosticPrinter.h" 

#include "clang/Basic/LangOptions.h" 
#include "clang/Basic/FileSystemOptions.h" 

#include "clang/Basic/SourceManager.h" 
#include "clang/Lex/HeaderSearch.h" 
#include "clang/Basic/FileManager.h" 

#include "clang/Basic/TargetOptions.h" 
#include "clang/Basic/TargetInfo.h" 

#include "clang/Lex/Preprocessor.h" 
#include "clang/Frontend/CompilerInstance.h" 


int main() 
{ 
    clang::DiagnosticOptions diagnosticOptions; 
    clang::TextDiagnosticPrinter *pTextDiagnosticPrinter = 
     new clang::TextDiagnosticPrinter(
      llvm::outs(), 
      diagnosticOptions); 
    llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> pDiagIDs; 
    //clang::DiagnosticIDs diagIDs; 

    clang::DiagnosticsEngine *pDiagnosticsEngine = 
     new clang::DiagnosticsEngine(pDiagIDs, pTextDiagnosticPrinter); 

    clang::LangOptions languageOptions; 
    clang::FileSystemOptions fileSystemOptions; 
    clang::FileManager fileManager(fileSystemOptions); 
    clang::SourceManager sourceManager(
     *pDiagnosticsEngine, 
     fileManager); 
    clang::HeaderSearch headerSearch(fileManager, *pDiagnosticsEngine); 

    clang::TargetOptions targetOptions; 
    targetOptions.Triple = llvm::sys::getDefaultTargetTriple(); 

    clang::TargetInfo *pTargetInfo = 
     clang::TargetInfo::CreateTargetInfo(
      *pDiagnosticsEngine, 
      targetOptions); 
    clang::CompilerInstance compInst; 

    clang::Preprocessor preprocessor(
     *pDiagnosticsEngine, 
     languageOptions, 
     pTargetInfo, 
     sourceManager, 
     headerSearch, 
     compInst); 

    return 0; 
} 

そして、私はこのような行をコンパイル++グラム使用:

g++ tutorial1.cpp -g -fno-rtti `llvm-config --cxxflags --ldflags --libs` -lclangBasic 
-lclangLex -lclangDriver -lclangFrontend -lclangParse -lclangAST -lclangSema 
-lclangAnalysis -I ../llvm/tools/clang/include/ 
-I/Users/scher/Documents/Projects/task/C/last_clang/llvm/include 
-I/Users/scher/Documents/Projects/task/C/last_clang/build/include 
-I/Users/scher/Documents/Projects/task/C/last_clang/build/tools/clang/include 

しかし、それは次のレポートで失敗します。ときに私は、それが発生したことを追加したい

Undefined symbols for architecture x86_64: 
    "clang::serialization::ModuleManager::lookup(llvm::StringRef)", referenced from: 
     clang::ASTUnit::TranslateStoredDiagnostics(clang::ASTReader*, llvm::StringRef, clang::SourceManager&, llvm::SmallVectorImpl<clang::StoredDiagnostic> const&, llvm::SmallVectorImpl<clang::StoredDiagnostic>&)in libclangFrontend.a(ASTUnit.o) 
    "clang::ASTWriter::ASTWriter(llvm::BitstreamWriter&)", referenced from: 
     clang::ASTUnit::serialize(llvm::raw_ostream&)  in libclangFrontend.a(ASTUnit.o) 
    "clang::ASTWriter::WriteAST(clang::Sema&, clang::MemorizeStatCalls*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, clang::Module*, llvm::StringRef)", referenced from: 
     clang::ASTUnit::serialize(llvm::raw_ostream&)  in libclangFrontend.a(ASTUnit.o) 
    "clang::ASTWriter::~ASTWriter()", referenced from: 
     clang::ASTUnit::serialize(llvm::raw_ostream&)  in libclangFrontend.a(ASTUnit.o) 
    "clang::PCHGenerator::PCHGenerator(clang::Preprocessor const&, llvm::StringRef, clang::Module*, llvm::StringRef, llvm::raw_ostream*)", referenced from: 
     (anonymous namespace)::PrecompilePreambleConsumer::PrecompilePreambleConsumer(clang::ASTUnit&, clang::Preprocessor const&, llvm::StringRef, llvm::raw_ostream*)in libclangFrontend.a(ASTUnit.o) 
    "clang::PCHGenerator::HandleTranslationUnit(clang::ASTContext&)", referenced from: 
     (anonymous namespace)::PrecompilePreambleConsumer::HandleTranslationUnit(clang::ASTContext&)in libclangFrontend.a(ASTUnit.o) 
    "clang::ASTWriter::getDeclID(clang::Decl const*)", referenced from: 
     (anonymous namespace)::PrecompilePreambleConsumer::HandleTranslationUnit(clang::ASTContext&)in libclangFrontend.a(ASTUnit.o) 
    "clang::PCHGenerator::~PCHGenerator()", referenced from: 
     (anonymous namespace)::PrecompilePreambleConsumer::~PrecompilePreambleConsumer()in libclangFrontend.a(ASTUnit.o) 
    "vtable for clang::ASTReaderListener", referenced from: 
     clang::ASTReaderListener::ASTReaderListener()in libclangFrontend.a(ASTUnit.o) 
    "clang::ASTReaderListener::~ASTReaderListener()", referenced from: 
     (anonymous namespace)::ASTInfoCollector::~ASTInfoCollector()in libclangFrontend.a(ASTUnit.o) 
    "clang::PCHGenerator::GetASTMutationListener()", referenced from: 
     vtable for (anonymous namespace)::PrecompilePreambleConsumerin libclangFrontend.a(ASTUnit.o) 
    "clang::PCHGenerator::GetASTDeserializationListener()", referenced from: 
     vtable for (anonymous namespace)::PrecompilePreambleConsumerin libclangFrontend.a(ASTUnit.o) 
    "clang::serialization::ModuleManager::addInMemoryBuffer(llvm::StringRef, llvm::MemoryBuffer*)", referenced from: 
     clang::ASTReader::addInMemoryBuffer(llvm::StringRef&, llvm::MemoryBuffer*)  in libclangFrontend.a(ChainedIncludesSource.o) 
    "clang::ASTReader::ASTReader(clang::Preprocessor&, clang::ASTContext&, llvm::StringRef, bool, bool)", referenced from: 
     clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, clang::Preprocessor&, clang::ASTContext&, void*, bool)in libclangFrontend.a(CompilerInstance.o) 
     clang::CompilerInstance::loadModule(clang::SourceLocation, llvm::ArrayRef<std::pair<clang::IdentifierInfo*, clang::SourceLocation> >, clang::Module::NameVisibilityKind, bool)in libclangFrontend.a(CompilerInstance.o) 
     clang::ASTUnit::LoadFromASTFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine>, clang::FileSystemOptions const&, bool, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, llvm::PointerUnion<char const*, llvm::MemoryBuffer const*> >*, unsigned int, bool)in libclangFrontend.a(ASTUnit.o) 
     createASTReader(clang::CompilerInstance&, llvm::StringRef, llvm::SmallVector<llvm::MemoryBuffer*, 4u>&, llvm::SmallVector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 4u>&, clang::ASTDeserializationListener*)in libclangFrontend.a(ChainedIncludesSource.o) 
    "clang::ASTReader::setDeserializationListener(clang::ASTDeserializationListener*)", referenced from: 
     clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, clang::Preprocessor&, clang::ASTContext&, void*, bool)in libclangFrontend.a(CompilerInstance.o) 
     clang::CompilerInstance::loadModule(clang::SourceLocation, llvm::ArrayRef<std::pair<clang::IdentifierInfo*, clang::SourceLocation> >, clang::Module::NameVisibilityKind, bool)in libclangFrontend.a(CompilerInstance.o) 
     createASTReader(clang::CompilerInstance&, llvm::StringRef, llvm::SmallVector<llvm::MemoryBuffer*, 4u>&, llvm::SmallVector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 4u>&, clang::ASTDeserializationListener*)in libclangFrontend.a(ChainedIncludesSource.o) 
    "clang::ASTReader::ReadAST(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, clang::serialization::ModuleKind)", referenced from: 
     clang::CompilerInstance::createPCHExternalASTSource(llvm::StringRef, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, clang::Preprocessor&, clang::ASTContext&, void*, bool)in libclangFrontend.a(CompilerInstance.o) 
     clang::CompilerInstance::loadModule(clang::SourceLocation, llvm::ArrayRef<std::pair<clang::IdentifierInfo*, clang::SourceLocation> >, clang::Module::NameVisibilityKind, bool)in libclangFrontend.a(CompilerInstance.o) 
     clang::ASTUnit::LoadFromASTFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine>, clang::FileSystemOptions const&, bool, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, llvm::PointerUnion<char const*, llvm::MemoryBuffer const*> >*, unsigned int, bool)in libclangFrontend.a(ASTUnit.o) 
     createASTReader(clang::CompilerInstance&, llvm::StringRef, llvm::SmallVector<llvm::MemoryBuffer*, 4u>&, llvm::SmallVector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 4u>&, clang::ASTDeserializationListener*)in libclangFrontend.a(ChainedIncludesSource.o) 
    "clang::ASTReader::makeModuleVisible(clang::Module*, clang::Module::NameVisibilityKind)", referenced from: 
     clang::CompilerInstance::loadModule(clang::SourceLocation, llvm::ArrayRef<std::pair<clang::IdentifierInfo*, clang::SourceLocation> >, clang::Module::NameVisibilityKind, bool)in libclangFrontend.a(CompilerInstance.o) 
    "clang::ASTReader::getOriginalSourceFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, clang::FileManager&, clang::DiagnosticsEngine&)", referenced from: 
     ParsePreprocessorArgs(clang::PreprocessorOptions&, clang::driver::ArgList&, clang::FileManager&, clang::DiagnosticsEngine&)in libclangFrontend.a(CompilerInvocation.o) 
    "clang::ASTDeserializationListener::~ASTDeserializationListener()", referenced from: 
     (anonymous namespace)::DelegatingDeserializationListener::~DelegatingDeserializationListener()in libclangFrontend.a(FrontendAction.o) 
     clang::MultiplexASTDeserializationListener::~MultiplexASTDeserializationListener()in libclangFrontend.a(MultiplexConsumer.o) 
    "vtable for clang::ASTDeserializationListener", referenced from: 
     clang::ASTDeserializationListener::ASTDeserializationListener()in libclangFrontend.a(FrontendAction.o) 
     clang::ASTDeserializationListener::ASTDeserializationListener()in libclangFrontend.a(MultiplexConsumer.o) 
    "clang::PCHGenerator::PCHGenerator(clang::Preprocessor const&, llvm::StringRef, clang::Module*, llvm::StringRef, llvm::raw_ostream*)", referenced from: 
     clang::GeneratePCHAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef) in libclangFrontend.a(FrontendActions.o) 
     clang::GenerateModuleAction::CreateASTConsumer(clang::CompilerInstance&, llvm::StringRef) in libclangFrontend.a(FrontendActions.o) 
     clang::ChainedIncludesSource::create(clang::CompilerInstance&) in libclangFrontend.a(ChainedIncludesSource.o) 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

コードclang::CompilerInstance compInst;を追加してください。この行がなければ、通常通りコンパイルされます。

また、私は打ち鳴らす/ LLVM 3.0を使用し、それは、このチュートリアルにそれが失敗した理由http://clang.llvm.org/get_started.html

任意の提案を使用して構築されましたか?

答えて

2

正しいライブラリを正しい順序でリストしていない可能性があります。私は正しいリストが私の頭の上にあるのかどうかわかりませんが、少なくともあなたは失われています-lclangSerialization

+0

これはまさに失われたものです!天才!どうもありがとう! – scherka

0

コマンドラインでのライブラリの順序が間違っている可能性があります。プロジェクトで指定されたmakefileを使用してみてください。https://github.com/loarabia/Clang-tutorial/blob/master/makefile makefileをあなたのディレクトリにコピーし、makeを実行するだけです。

+0

標準のインクルードディレクトリにclang/llvmソースがないので、makefileはこのようなことはできません – scherka