Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我建立了一个 JIT,它读取 c 代码并将它们转换为目标文件 (.o);目标文件存储了一个 ````main(int argc, char **argv)'''' 函数。我的问题是如何将这个对象加载到内存中并执行存储在其中的主函数?
注意:我在 SO 中看到了许多类似的问题,但我找不到我的答案,所以请不要将此问题标记为重复问题
您可以直接gcc生成一个共享对象 (.so) 文件(这可以从 .c 文件和 .o 文件中获得) - 选项-shared,并且-fpic可能是必需的。然后您可以使用 加载它void *handle = dlopen(...),使用 获取包含函数的地址p = dlsym(handle, "main")并使用 执行它p()。
gcc
-shared
-fpic
void *handle = dlopen(...)
p = dlsym(handle, "main")
p()