我正在尝试从 c++ 源代码生成一些代码并通过即时编译器运行。当我通过 clang++ 编译并生成二进制可执行文件时,它可以完美运行,但是当我生成位码并尝试使用 lli 命令通过 JIT 运行时,它会生成运行时错误。你能帮我理解发生了什么吗?
例如:让 example.cpp 包含以下代码:
#include <iostream>
int main(){
std::cout << "\nHello World!";
return 0;
}
我正在使用以下命令生成运行良好的可执行文件。
clang++ example.cpp
我正在使用以下命令生成位码:
clang++ -S -emit-llvm example.cpp
然后使用以下生成运行时错误的命令运行 JIT:
lli example.ll
我收到以下访问冲突错误:
Stack dump:
0. Program arguments: lli example.ll
#0 0x00000000025fd9af llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/xpc/llvm/llvm-project1/llvm-project/llvm/lib/Support/Unix/Signals.inc:564:0
#1 0x00000000025fda42 PrintStackTraceSignalHandler(void*) /home/xpc/llvm/llvm-project1/llvm-project/llvm/lib/Support/Unix/Signals.inc:625:0
#2 0x00000000025fb7ca llvm::sys::RunSignalHandlers() /home/xpc/llvm/llvm-project1/llvm-project/llvm/lib/Support/Signals.cpp:68:0
#3 0x00000000025fd329 SignalHandler(int) /home/xpc/llvm/llvm-project1/llvm-project/llvm/lib/Support/Unix/Signals.inc:406:0
#4 0x00007fa75dbdc390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
Segmentation fault (core dumped)