Gcc 构建LLVM示例:架构x86_64的未定义符号
我在笔记本电脑上安装了LLVM,但在编译Gcc 构建LLVM示例:架构x86_64的未定义符号,gcc,compiler-construction,clang,llvm,Gcc,Compiler Construction,Clang,Llvm,我在笔记本电脑上安装了LLVM,但在编译LLVM/examples/Fibonacci中的Fibonacci示例时遇到问题: clang++-std=c++11-I..//包括fibonacci.cpp-o fib 根据,我添加了一些驱动程序标志: clang++fibonacci.cpp-std=c++11-I../。/包括-o fib-D_ustdc_常量_宏-D_ustdc_限制_宏 产生的不同错误: Undefined symbols for architecture x86_64:
LLVM/examples/Fibonacci
中的Fibonacci
示例时遇到问题:
clang++-std=c++11-I..//包括fibonacci.cpp-o fib
根据,我添加了一些驱动程序标志:
clang++fibonacci.cpp-std=c++11-I../。/包括-o fib-D_ustdc_常量_宏-D_ustdc_限制_宏
产生的不同错误:
Undefined symbols for architecture x86_64:
"_LLVMInitializeX86Target", referenced from:
llvm::InitializeNativeTarget() in fibonacci-1b0cd0.o
"_LLVMInitializeX86TargetInfo", referenced from:
llvm::InitializeNativeTarget() in fibonacci-1b0cd0.o
"_LLVMInitializeX86TargetMC", referenced from:
llvm::InitializeNativeTarget() in fibonacci-1b0cd0.o
"_LLVMLinkInInterpreter", referenced from:
(anonymous namespace)::ForceInterpreterLinking::ForceInterpreterLinking() in fibonacci-1b0cd0.o
"llvm::BasicBlock::BasicBlock(llvm::LLVMContext&, llvm::Twine const&, llvm::Function*, llvm::BasicBlock*)", referenced from:
llvm::BasicBlock::Create(llvm::LLVMContext&, llvm::Twine const&, llvm::Function*, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::BranchInst::BranchInst(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::BasicBlock*)", referenced from:
llvm::BranchInst::Create(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::ReturnInst::ReturnInst(llvm::LLVMContext&, llvm::Value*, llvm::BasicBlock*)", referenced from:
llvm::ReturnInst::Create(llvm::LLVMContext&, llvm::Value*, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::VectorType::get(llvm::Type*, unsigned int)", referenced from:
llvm::CmpInst::makeCmpResultType(llvm::Type*) in fibonacci-1b0cd0.o
"llvm::ConstantInt::get(llvm::IntegerType*, unsigned long long, bool)", referenced from:
CreateFibFunction(llvm::Module*, llvm::LLVMContext&) in fibonacci-1b0cd0.o
"llvm::Instruction::Instruction(llvm::Type*, unsigned int, llvm::Use*, unsigned int, llvm::BasicBlock*)", referenced from:
llvm::CallInst::CallInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::Instruction::~Instruction()", referenced from:
llvm::CmpInst::~CmpInst() in fibonacci-1b0cd0.o
llvm::CallInst::CallInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::LLVMContext::LLVMContext()", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::LLVMContext::~LLVMContext()", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::raw_ostream::write(char const*, unsigned long)", referenced from:
llvm::raw_ostream::operator<<(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in fibonacci-1b0cd0.o
llvm::raw_ostream::operator<<(llvm::StringRef) in fibonacci-1b0cd0.o
"llvm::raw_ostream::operator<<(long)", referenced from:
llvm::raw_ostream::operator<<(int) in fibonacci-1b0cd0.o
"llvm::verifyModule(llvm::Module const&, llvm::raw_ostream*)", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::EngineBuilder::selectTarget()", referenced from:
llvm::EngineBuilder::create() in fibonacci-1b0cd0.o
"llvm::EngineBuilder::create(llvm::TargetMachine*)", referenced from:
llvm::EngineBuilder::create() in fibonacci-1b0cd0.o
"llvm::EngineBuilder::EngineBuilder(std::__1::unique_ptr<llvm::Module, std::__1::default_delete<llvm::Module> >)", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::EngineBuilder::~EngineBuilder()", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::BinaryOperator::Create(llvm::Instruction::BinaryOps, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)", referenced from:
llvm::BinaryOperator::CreateSub(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*) in fibonacci-1b0cd0.o
llvm::BinaryOperator::CreateAdd(llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::llvm_unreachable_internal(char const*, char const*, unsigned int)", referenced from:
llvm::User::operator delete(void*, unsigned int) in fibonacci-1b0cd0.o
"llvm::Type::getInt32Ty(llvm::LLVMContext&)", referenced from:
CreateFibFunction(llvm::Module*, llvm::LLVMContext&) in fibonacci-1b0cd0.o
"llvm::Type::getInt1Ty(llvm::LLVMContext&)", referenced from:
llvm::CmpInst::makeCmpResultType(llvm::Type*) in fibonacci-1b0cd0.o
"llvm::User::operator delete(void*)", referenced from:
CreateFibFunction(llvm::Module*, llvm::LLVMContext&) in fibonacci-1b0cd0.o
llvm::ICmpInst::~ICmpInst() in fibonacci-1b0cd0.o
(maybe you meant: __ZN4llvm4UserdlEPvj)
"llvm::User::operator new(unsigned long, unsigned int)", referenced from:
llvm::CmpInst::operator new(unsigned long) in fibonacci-1b0cd0.o
llvm::BranchInst::Create(llvm::BasicBlock*, llvm::BasicBlock*, llvm::Value*, llvm::BasicBlock*) in fibonacci-1b0cd0.o
llvm::ReturnInst::Create(llvm::LLVMContext&, llvm::Value*, llvm::BasicBlock*) in fibonacci-1b0cd0.o
llvm::CallInst::Create(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&, llvm::BasicBlock*) in fibonacci-1b0cd0.o
"llvm::errs()", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::outs()", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::APInt::initSlowCase(unsigned int, unsigned long long, bool)", referenced from:
llvm::APInt::APInt(unsigned int, unsigned long long, bool) in fibonacci-1b0cd0.o
"llvm::Value::setName(llvm::Twine const&)", referenced from:
CreateFibFunction(llvm::Module*, llvm::LLVMContext&) in fibonacci-1b0cd0.o
"llvm::Module::getOrInsertFunction(llvm::StringRef, llvm::Type*, ...)", referenced from:
CreateFibFunction(llvm::Module*, llvm::LLVMContext&) in fibonacci-1b0cd0.o
"llvm::Module::Module(llvm::StringRef, llvm::LLVMContext&)", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::Module::~Module()", referenced from:
_main in fibonacci-1b0cd0.o
"llvm::CmpInst::anchor()", referenced from:
vtable for llvm::ICmpInst in fibonacci-1b0cd0.o
"llvm::CmpInst::CmpInst(llvm::Type*, llvm::Instruction::OtherOps, unsigned short, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::BasicBlock*)", referenced from:
llvm::ICmpInst::ICmpInst(llvm::BasicBlock&, llvm::CmpInst::Predicate, llvm::Value*, llvm::Value*, llvm::Twine const&) in fibonacci-1b0cd0.o
"llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&)", referenced from:
llvm::CallInst::init(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&) in fibonacci-1b0cd0.o
"llvm::Type::getScalarType() const", referenced from:
llvm::Type::isIntOrIntVectorTy() const in fibonacci-1b0cd0.o
llvm::Type::isPtrOrPtrVectorTy() const in fibonacci-1b0cd0.o
"llvm::APInt::print(llvm::raw_ostream&, bool) const", referenced from:
llvm::operator<<(llvm::raw_ostream&, llvm::APInt const&) in fibonacci-1b0cd0.o
"llvm::Module::print(llvm::raw_ostream&, llvm::AssemblyAnnotationWriter*, bool, bool) const", referenced from:
llvm::operator<<(llvm::raw_ostream&, llvm::Module const&) in fibonacci-1b0cd0.o
"llvm::Function::BuildLazyArguments() const", referenced from:
llvm::Function::CheckLazyArguments() const in fibonacci-1b0cd0.o
"typeinfo for llvm::CmpInst", referenced from:
typeinfo for llvm::ICmpInst in fibonacci-1b0cd0.o
"vtable for llvm::CallInst", referenced from:
llvm::CallInst::CallInst(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&, llvm::BasicBlock*) in fibonacci-1b0cd0.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)
CMake auto build生成的llvm/build/bin
的可执行文件很好,这可能证明工具链正在工作
但我还是想深入到代码中去观察
有人能帮我吗
LLVM version 3.8.0svn
Default target: x86_64-apple-darwin15.0.0
Host CPU: has well
clang version 3.8.0
Target: x86_64-apple-darwin15.0.0
Thread model: posix
更新: 我构建了一个无所事事的测试.cpp:
#include "llvm/IR/Verifier.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/ExecutionEngine/Interpreter.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_ostream.h"
int main(int argc, char const *argv[])
{
printf("hello world\n");
return 0;
}
并成功编译:
clang++-g-O3-std=c++11 a-test.cppllvm-config--cppflags--ldflags--system libs--libs core executionengine解释器mc支持nativecodegen
-o a-test
a-test
但是对于fibonacci.cpp来说就不是那么好了:
#include "llvm/IR/Verifier.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/ExecutionEngine/Interpreter.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_ostream.h"
int main(int argc, char const *argv[])
{
printf("hello world\n");
return 0;
}
clang++-g-O3-std=c++11 fibonacci.cppllvm配置--cppflags--ldflags--system libs--libs核心执行引擎解释器mc支持nativecodegen
-o fib
如果查看构建斐波那契的CMAKE文件,您会发现它需要的不仅仅是核心库 它需要
核心
,执行引擎
,解释器
,MC
,支持
,国家代码
。正确的--libs
行应该是--libs核心执行引擎解释器mc支持nativecodegen
您要查找的文件是build.ninja
。如果你在那里搜索斐波那契,你会找到你需要的所有信息
编辑:由于这里的操作困难,我还包括了编辑过的命令行
通常,使用llvm config--ldflags--libs更容易,而不必担心您到底需要哪个子集
这不是正确的方法,无论如何,使用构建系统 。。我在你问的另一个问题中回答了这个问题,基本上是一样的,但是你删除了这个问题(我的回答有点粗鲁!)——使用内置的忍者目标忍者Fibonnaci
有什么不对。如果您想查看确切的命令行,请查看build系统中的build.log。@dune.rocks我的道歉。你的回答确实很有启发性,但我从其他问题中得到了一个完整的答案。所以下次发生这种事情时,我应该首先接受你的回答。@dune.rocks你能写一个带说明的回答吗。我搜索build.log
,但在文件夹中什么也没有得到。搜索日志文件
仅查找CMakeError.log
,CMakeOutput.log
和CMakeOutput.log
都不起作用:0。无法识别驱动程序标志(更新中描述)。1.找不到包含ninja
部分的文件。您忘记了llvm配置的后引号,实际上正在将选项传递给编译器!我看到了《你好世界》
!仍然停留在fibonacci.cpp
上,您需要通过-fno-rtti
才能使其正常工作。现在我想起来了,你还需要-fno异常<代码>-在这种情况下不需要fno异常
。
#include "llvm/IR/Verifier.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/ExecutionEngine/Interpreter.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_ostream.h"
int main(int argc, char const *argv[])
{
printf("hello world\n");
return 0;
}
hello world
Undefined symbols for architecture x86_64:
"typeinfo for llvm::CmpInst", referenced from:
typeinfo for llvm::ICmpInst in fibonacci-009ddf.o
ld: symbol(s) not found for architecture x86_64
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)
clang++ -g -O3 -std=c++11 -fno-exceptions -fno-rtti fibonacci.cpp `llvm-config --cppflags --ldflags --system-libs --libs core executionengine interpreter mc support nativecodegen` -o fib