这是我要做的:
>运行程序并初始化一些数据结构.
>然后编译可以访问/修改现有数据结构的附加代码.
>根据需要重复步骤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我认为这将适用于你.