有没有办法在C或C运行时编译附加代码?

前端之家收集整理的这篇文章主要介绍了有没有办法在C或C运行时编译附加代码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我要做的:

>运行程序并初始化一些数据结构.
>然后编译可以访问/修改现有数据结构的附加代码.
>根据需要重复步骤2.

我想要能够在C和C上使用类似Unix的系统(特别是Linux和Mac OS X)上的gcc(最终是Java)来实现.这个想法是为这些语言基本上实现一个read-eval-print循环,在编译表达式和语句时输入它们,并使用它们来修改现有的数据结构(脚本语言完成的任务).我在python中编写这个工具,它生成C/C++文件,但这不是相关的.

我已经探讨了使用共享库执行此操作,但了解到修改共享库不会影响已经在运行的程序.我也尝试使用共享内存,但找不到一种方法来将功能加载到堆上.我也考虑过使用汇编代码,但还没有尝试这样做.

除了gcc之外绝对没有办法,除了gcc之外,我不想使用任何编译器.

如果任何人有任何想法或知道如何做到这一点,任何帮助将不胜感激.

解决方法

我认为您可以使用动态库并在运行时加载(使用dlopen和朋友)来完成此任务.
void * lib = dlopen("mynewcode.so",RTLD_LAZY);
if(lib) {
    void (*fn)(void) = dlsym(lib,"libfunc");

    if(fn) fn();
    dlclose(lib);
}

你显然必须在编译新的代码,但如果你继续替换mynewcode.so我认为这将适用于你.

猜你在找的C&C++相关文章