这是我想做的:
我希望能够既要做到这一点C,并C++使用gcc(并最终Java于)类Unix系统(特别是Linux和Mac OS X)。这个想法基本上是为这些语言实现read-eval- print循环,该循环会在输入表达式和语句时对其进行编译,并使用它们来修改现有的数据结构(该操作始终以脚本语言完成)。我正在用编写该工具python,该工具会生成C/ C++文件,但这应该无关紧要。
C
C++
gcc
Java
python
我已经探索过使用共享库执行此操作,但了解到修改共享库不会影响已经在运行的程序。我也尝试过使用共享内存,但是找不到将函数加载到堆上的方法。我也考虑过使用汇编代码,但尚未尝试使用。
我宁愿不要使用任何编译器,gcc除非绝对没有办法在中进行编译gcc。
如果任何人有任何想法或知道如何执行此操作,将不胜感激。
我认为您可以使用动态库并在运行时(使用dlopen和朋友)加载它们来完成此操作。
dlopen
void * lib = dlopen("mynewcode.so", RTLD_LAZY); if(lib) { void (*fn)(void) = dlsym(lib, "libfunc"); if(fn) fn(); dlclose(lib); }
显然,您在进行过程中将不得不编译新代码,但是如果您继续替换,mynewcode.so我认为这将对您有用。
mynewcode.so