我想要为一个新的目标构建一个编译器,然后选择llvm。据我所知,我可以使用clang项目作为前端,将llvm用作后端。我可以从llc (llvm的一部分)中获取.o文件。现在我需要将它们都链接到可执行文件中。我试过使用lld项目,但是编译失败了,错误如下:
Desktop/llvm_project/llvm/lib/Target/ARM/ARMISelLowering.cpp: In member function ‘llvm::Instruction* llvm::ARMTargetLowering::makeDMB(llvm::IRBuilder<>&, llvm::ARM_MB::MemBOpt) const’:
Desktop/llvm_project/llvm/lib/Target/ARM/ARMISelLowering.cpp:11000:73: error: could not convert ‘{(& Builder)->llvm::IRBuilder<>::<anonymous>.llvm::IRBuilderBase::getInt32(15u), (& Builder)->llvm::IRBuilder<>::<anonymous>.llvm::IRBuilderBase::getInt32(0u), (& Builder)->llvm::IRBuilder<>::<anonymous>.llvm::IRBuilderBase::getInt32(0u), (& Builder)->llvm::IRBuilder<>::<anonymous>.llvm::IRBuilderBase::getInt32(7u), (& Builder)->llvm::IRBuilder<>::<anonymous>.llvm::IRBuilderBase::getInt32(10u), (& Builder)->llvm::IRBuilder<>::<anonymous>.llvm::IRBuilderBase::getInt32(5u)}’ from ‘<brace-enclosed initializer list>’ to ‘llvm::ArrayRef<llvm::Value*>’
Builder.getInt32(10), Builder.getInt32(5)};
^
make[2]: *** [lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/ARMISelLowering.cpp.o] Error 1
make[1]: *** [lib/Target/ARM/CMakeFiles/LLVMARMCodeGen.dir/all] Error 2
make: *** [all] Error 2
所以我有几个问题,因为我想我遗漏了一些东西:
不名-a
gcc -v
发布于 2014-09-17 23:04:32
您遇到的错误是llvm本身,而不是lld。我在建筑机器人上没有看到这个错误,所以我建议更新您的源树。
至于二进制文件,llvm目前并没有为它们提供完全的替换。这项工作正在进行中,但还需要一段时间才能完成。就目前而言,我建议使用gnu作为链接器,其中包括ld或gold。
https://stackoverflow.com/questions/25904368
复制