如何用C创建和使用与架构无关的代码模块? [已关闭]

问题描述 投票:0回答:1

我有一个 C 编写的程序,我编译它 原生地。我想找到一种方法来创建 独立于架构的“插件”模块, 也是从 C 编译的,我将能够 最好与 dlopen/dlsym-alike 一起使用 API,并使用一些执行其功能 嵌入式解释器或 JIT。

我发现 clang 可以发出 LLVM IR,并且 然后可以将该 IR 放入共享库中。 想必, 这样的共享库将是独立于架构的。 但我找不到框架 提供了一个现成的 dlopen/dlsym 类似的 API 和嵌入式解释器或 JIT 库。只有

lli
可以解释 整个程序来自 LLVM IR。解决方案为 仅解释特定的共享库, 找不到。

或者也许除了 LLVM IR 之外还有其他东西, 您可以编译 C 代码并创建 一个类似于共享库的模块?

c shared-libraries interpreter jit llvm-ir
1个回答
-1
投票

我发现可以使用 LLVM IR 创建共享库。

您似乎认为需要 LLVM IR 来创建共享库,但事实并非如此——共享库比 LLVM 早至少 30 年,并且您可以使用与之前使用的完全相同的本机 C 编译器来创建它们本机编译您的主程序。

gcc main.c -o program
gcc -fPIC -shared -o plugin.so plugin.c

瞧:

plugin.so
现在可以与
dlopen
dlsym
一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.