Я собрал цели clang,llvm,lld,openmp из исходного кода монорепозитория llvm. Я использовал следующие команды:
cmake -G "Ninja" -DLLVM_ENABLE_PROJECTS="clang;lld;llvm;openmp" -DCMAKE_BUILD_TYPE=Debug -DLLVM_USE_LINKER=lld ../llvm -DCMAKE_INSTALL_PREFIX=~/git_repos/llvm-project/install cmake --build. --целевая установка После завершения сборки я пытаюсь скомпилировать и сгенерировать исполняемый файл для файла C++, используя следующие заголовки:
#include "clang/Frontend/ASTUnit.h" #include "clang/Serialization/ASTWriter.h" #include "clang/Serialization/InMemoryModuleCache.h" #include "clang/Tooling/Tooling.h" #include "llvm/ADT/SmallString.h" #include "llvm/Bitstream/BitstreamWriter.h" Команда компиляции выглядит следующим образом:
g++ -I clang/include -I build/tools/clang/include -I build/include -I llvm/include test.cc $CLANGLIBS -lLLVM-14 -L build/lib Переменная $CLANGLIBS имеет значение: -lclangTooling -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnaанализ - lclangARCMigrate -lclangRewrite -lclangRewriteFrontend -lclangEdit -lclangAST -lclangLex - lclangBasic -lcurses
Когда я запускаю приведенную выше команду, она выдает множество ошибок неопределенных ссылок следующим образом:
/usr/bin/ld: build/lib/libclangTooling.a(AllTUsExecution.cpp.o):(.data.rel+0x0): неопределенная ссылка на `llvm::EnableABIBreakingChecks' /usr/bin/ld: build/lib/libclangTooling.a(AllTUsExecution.cpp.o): в функции `llvm::Error::assertIsChecked()': /home/rajkumar/git_repos/llvm-project/llvm/include/llvm/Support/Error.h:269: неопределенная ссылка на `llvm::Error::fatalUncheckedError() const' /usr/bin/ld: build/lib/libclangTooling.a(ArgumentsAdjusters.cpp.o):(.data.rel+0x0): неопределенная ссылка на `llvm::EnableABIBreakingChecks' /usr/bin/ld: build/lib/libclangTooling.a(Execution.cpp.o): в функции `clang::tooling::internal::createExecutorFromCommandLineArgsImpl(int&, char const**, llvm:
Даже после того, как я попробовал пару потоков переполнения стека, мне кажется, это не решило проблему: Ошибка компиляции при EnableABIBreakingChecks
Я очень ценю любую помощь, поскольку я новичок в компиляции и использовании исходного кода llvm.
Спасибо
Раджкумар Ананту.
РЕДАКТИРОВАТЬ:
Причина, по которой я использую g++ для компиляции входного файла, заключается в том, что g++ — мой компилятор по умолчанию, а весь исходный код clang и LLVM компилируется только с использованием g++.
Мобильная версия