我正在采取步骤从 LLVM 社区的邮件消息中编译和运行 JIT 代码。
[LLVMdev] MCJIT 和万花筒教程
头文件:
// foo.h
extern void foo(void);
和一个简单的 foo() 函数的函数:
//foo.c
#include <stdio.h>
void foo(void) {
puts("Hello, I'm a shared library");
}
主要功能:
//main.c
#include <stdio.h>
#include "foo.h"
int main(void) {
puts("This is a shared library test...");
foo();
return 0;
}
使用 foo.c 构建共享库:
gcc foo.c -shared -o libfoo.so -fPIC
为 main.c 文件生成 LLVM 位码:
clang -Wall -c -emit-llvm -O3 main.c -o main.bc
并通过 jit(和 MCJIT)运行 LLVM 位码以获得所需的输出:
lli -load=./libfoo.so main.bc
lli -use-mcjit -load=./libfoo.so main.bc
您还可以将 clang 输出通过管道传输到 lli:
clang -Wall -c -emit-llvm -O3 main.c -o - | lli -load=./libfoo.so
输出
This is a shared library test...
Hello, I'm a shared library
来源获得自
在 Linux 上与 GCC 共享库