LLVM отсутствует компоновщик и не может скомпилировать lld (llvm linker)
Я хочу построить компилятор для новой цели, и я выбираю llvm. Насколько я понимаю, я могу использовать проект clang в качестве внешнего интерфейса и llvm в качестве внутреннего. Я могу получить.o файлы из llc (часть llvm). теперь мне нужно связать их все в исполняемый файл. Я попытался использовать проект 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
поэтому у меня есть несколько вопросов, потому что я думаю, что что-то упустил:
- если у меня нет binutils для новой цели, как мне использовать проект llvm? - они создают отличный проект... но без последней части, которая на самом деле создает запущенные файлы?! что я должен использовать в качестве компоновщика?
- кто-нибудь сталкивался с этой ошибкой сборки lld и решил ее?
uname -a
- Linux my_name-Inspiron-3521 3.13.0-35-generiC#62-Ubuntu SMP пт 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..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-суффикс =-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-includes-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 --disable-browser-plugin --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-list=m32,m64,mx32 --with-tune= универсальный --enable-проверочный = выпуск --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)
1 ответ
Ошибка, с которой вы сталкиваетесь, в самом lvm, а не в lld. Я не вижу этой ошибки в сборочных ботах, поэтому рекомендую обновить дерево исходных текстов.
Что касается binutils, llvm в настоящее время не обеспечивает их полную замену. Над этим работают, но пройдет некоторое время, прежде чем он будет завершен. Сейчас я рекомендую использовать gnu binutils с ld или gold в качестве компоновщика.