微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在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我认为这将适用于你.

原文地址:https://www.jb51.cc/c/115730.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐