我有一个 C 编写的程序,我编译它 原生地。我想找到一种方法来创建 独立于架构的“插件”模块, 也是从 C 编译的,我将能够 最好与 dlopen/dlsym-alike 一起使用 API,并使用一些执行其功能 嵌入式解释器或 JIT。
我发现 clang 可以发出 LLVM IR,并且 然后可以将该 IR 放入共享库中。 想必, 这样的共享库将是独立于架构的。 但我找不到框架 提供了一个现成的 dlopen/dlsym 类似的 API 和嵌入式解释器或 JIT 库。只有
lli
可以解释
整个程序来自 LLVM IR。解决方案为
仅解释特定的共享库,
找不到。
或者也许除了 LLVM IR 之外还有其他东西, 您可以编译 C 代码并创建 一个类似于共享库的模块?
我发现可以使用 LLVM IR 创建共享库。
您似乎认为需要 LLVM IR 来创建共享库,但事实并非如此——共享库比 LLVM 早至少 30 年,并且您可以使用与之前使用的完全相同的本机 C 编译器来创建它们本机编译您的主程序。
gcc main.c -o program
gcc -fPIC -shared -o plugin.so plugin.c
瞧:
plugin.so
现在可以与 dlopen
和 dlsym
一起使用。