Встречайте проблему компиляции llvm-config с помощью clang при следовании учебнику по llvm
я сейчас учусьllvm
для курсовой работы в школе. Я следовал официальному руководству llvm и столкнулся с проблемой при завершении персонажа 3 (ссылка: https://releases.llvm.org/15.0.0/docs/tutorial/MyFirstLanguageFrontend/LangImpl03.html).
Ниже моя среда:
Windows 10 with AMD R5800H
clang version 16.0.0
LLVM version 16.0.0
CMake version 3.25.0
clang and LLVM were built by source code from GitHub using CMake and VS-2022
Вот файлы, которые я включаю в свою программу .cc:
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Verifier.h"
#include <algorithm>
#include <cctype>
#include <cstdio>
#include <cstdlib>
#include <map>
#include <memory>
#include <string>
#include <vector>
Мы видим, что первые несколько строк включают заголовочные файлы llvm.
Когда я закончил программировать, я попытался скомпилировать приведенный ниже оператор PowerShell (PS. Я не знаю, что означает каждая часть, просто следуя руководству):
clang++ -g -O3 my-lang.cc `llvm-config --cxxflags --ldflags --system-libs --libs core` -o mylang
Но Shell выводит следующую информацию:
clang: error: unsupported option '--cxxflags'
clang: error: unsupported option '--ldflags'
clang: error: unsupported option '--system-libs'
clang: error: unsupported option '--libs'
clang: error: no such file or directory: 'llvm-config'
clang: error: no such file or directory: 'core -o'
clang: error: no such file or directory: 'mylang'
Очевидно, что что-то не так с моим clang и/или llvm-config, но решить их мне не удалось.
- Первый способ, который я пробовал, это переустановить clang и llvm на свой компьютер, хотя смысла в этом явно не было.
- Затем я попытался запустить инструкцию в командной строке (CMD). Но у него есть другой похожий, но другой выход.
clang: error: unsupported option '--cxxflags'
clang: error: unsupported option '--ldflags'
clang: error: unsupported option '--system-libs'
clang: error: unsupported option '--libs'
clang: error: no such file or directory: '`llvm-config'
clang: error: no such file or directory: 'core`'
- После этого я проверил, может ли он работать отдельно для clang и llvm-config.
я только делаюllvm-config --cxxflags --ldflags --system-libs --libs core
и получить вещи ниже:
-IE:\CDemo\llvm\llvm-project\llvm\include -IE:\CDemo\llvm\llvm-project\build\include -std:c++17 /EHs-c- /GR- -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -DUNICODE -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-LIBPATH:E:\CDemo\llvm\llvm-project\build\Release\lib
E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMCore.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMRemarks.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMBitstreamReader.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMBinaryFormat.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMSupport.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMDemangle.lib
psapi.lib shell32.lib ole32.lib uuid.lib advapi32.lib
И делайclang++ my-lang.cc -o mylang
и получить вещи ниже:
my-lang.cc:1:10: fatal error: 'llvm/ADT/APFloat.h' file not found
#include "llvm/ADT/APFloat.h"
^~~~~~~~~~~~~~~~~~~~
1 error generated.
Я думаю, что это файлы, которые мне нужно связать в моей программе, и это также доказывает, чтоllvm-config
может работает нормально.
Но почему clang и llvm-config не могут нормально работать вместе?
Как я могу скомпилировать свою программу?
==========
дата редактирования: 2022/12/2
Ага. Я пытался$()
и это сработало. Но возникла новая ошибка. Когда я делаю заявлениеclang++ -g -O3 my-lang.cc $(llvm-config --cxxflags --ldflags --system-libs --libs core) -o mylang
в Power Shell было сказано:
clang++: error: no such file or directory: 'E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMCore.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMRemarks.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMBitstreamReader.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMBinaryFormat.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMSupport.lib E:\CDemo\llvm\llvm-project\build\Release\lib\LLVMDemangle.lib'
clang++: error: no such file or directory: 'psapi.lib shell32.lib ole32.lib uuid.lib advapi32.lib'
Первый момент, который меня действительно смущает, заключается в том, что эти файлы существуют на моем компьютере и находятся на правильном пути.
PS E:\CDemo\llvm\llvm-project\build\Release\lib> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
...
-a---- 2022/12/1 22:59 19281400 LLVMCore.lib
-a---- 2022/12/1 22:58 1184306 LLVMRemarks.lib
-a---- 2022/12/1 22:56 240648 LLVMBitstreamReader.lib
-a---- 2022/12/1 22:56 887888 LLVMBinaryFormat.lib
-a---- 2022/12/1 22:56 11201768 LLVMSupport.lib
-a---- 2022/12/1 22:56 862826 LLVMDemangle.lib
...
Во-вторых, что это означаетpsapi.lib shell32.lib ole32.lib uuid.lib advapi32.lib
и где я могу их найти?