使用g++与clang / LLVM链接失败
link fails with clang / llvm using g++
我正在尝试编译这个。ccp文件。我从https://github.com/loarabia/Clang-tutorial上得到的。
// 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++编译行:
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;
代码时,它会发生。如果没有这一行,它可以正常编译。
我也使用clang/llvm 3.0,它是使用这个教程http://clang.llvm.org/get_started.html构建的
有什么建议吗?
您可能没有按照正确的顺序列出正确的库。我不知道正确的列表是什么,但至少你错过了-lclangSerialization
。
命令行中的库顺序可能是错误的。尝试使用项目中给出的makefile - https://github.com/loarabia/Clang-tutorial/blob/master/makefile。只需将makefile复制到您的目录并运行make.
相关文章:
- 使用 LLVM 时出现链接器错误
- 如何链接两个LLVM位码模块?
- LLVM 传递链接问题:未定义的符号
- LLVM 通行证:破坏库未与传递库链接
- 如何使用LLVM LLD链接libstdc++
- 与LLVM LLD链接不起作用[MACOS]
- 不满意的链接错误,当使用LLVM运行javacpp预设时
- 使用CMAKE和MINGW在Windows上链接LLVM库
- 如何查看必须链接哪个 LLVM 库才能解析 PassManagerBuilder::addGlobalExtension
- LLVM:VS 2015 中的链接错误
- 无法在不使用RTTI构建LLVM的情况下链接LLVM编译器教程程序
- 链接时错误地折叠了LLVM IR类型(C++API)
- 如何使用 clang 和 llvm-link 链接库
- 在linux上链接clang/llvm库总是失败
- Apple LLVM 4.1 的 STD 链接器错误
- LLVM 教程 3.6 尝试编译第 8 章输出时的链接器错误
- 如何进行llvm链接时间优化
- 使用 LLVM 在 OSX 上将问题与 boost::p rogram_options 链接
- 使用g++与clang / LLVM链接失败
- 使用LLVM链接器生成C代码