【问题标题】:LLVM missing linker and can't compile the lld (llvm linker)LLVM 缺少链接器,无法编译 lld(llvm 链接器)
【发布时间】:2014-11-12 07:18:05
【问题描述】:

我想为一个新目标构建一个编译器,我选择了 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

所以我有几个问题,因为我认为我遗漏了一些东西:

  1. 如果我没有用于新目标的 binutils,我应该如何使用 llvm 项目? - 他们创造了他们伟大的项目......但没有实际创建运行文件的最后一块?!我应该使用什么作为链接器?
  2. 有人遇到过这个 lld 构建错误并解决了吗?

uname -a

  • Linux my_name-Inspiron-3521 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

gcc -v

  • 使用内置规范。 COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper 目标:x86_64-linux-gnu 配置:../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java, go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without -included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ - -enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --禁用浏览器插件 --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre - -enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm -exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-l ist=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 线程模型: posix gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

【问题讨论】:

    标签: linker llvm linker-errors lld


    【解决方案1】:

    您遇到的错误是在 llvm 本身,而不是 lld。我在buildbots 上没有看到该错误,因此我建议更新您的源代码树。

    至于 binutils,llvm 目前并没有提供完整的替代品。这项工作正在进行中,但完成之前还需要一段时间。现在我建议使用带有 ld 或 gold 作为链接器的 gnu binutils。

    【讨论】:

    • 如果我在没有 ld 项目的情况下构建 llvm,它可以工作。添加 ld 项目时出现上述错误。
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多