Existe alguma maneira de compilar código adicional em tempo de execução em C ou C ++?
Aqui está o que eu quero fazer:
Execute um programa e inicialize algumas estruturas de dados.Em seguida, compile o código adicional que pode acessar / modificar as estruturas de dados existentes.Repita o passo 2, conforme necessário.Eu quero ser capaz de fazer isso com ambosC
eC++
usandogcc
(e eventualmenteJava
) em sistemas do tipo Unix (especialmente Linux e Mac OS X). A idéia é implementar basicamente um loop de leitura e impressão para essas linguagens que compila expressões e instruções à medida que são inseridas e as utiliza para modificar estruturas de dados existentes (algo que é feito o tempo todo em linguagens de script). Eu estou escrevendo esta ferramenta empython
, que gera oC
/C++
arquivos, mas isso não deve ser relevante.
Eu explorei isso com bibliotecas compartilhadas, mas aprendi que modificar bibliotecas compartilhadas não afeta programas que já estão em execução. Eu também tentei usar a memória compartilhada, mas não consegui encontrar uma maneira de carregar uma função no heap. Eu também considerei usar o código assembly, mas ainda não tentei fazê-lo.
Eu preferiria não usar compiladores que não fossemgcc
a menos que não há absolutamente nenhuma maneira de fazê-lo emgcc
.
Se alguém tem alguma idéia ou sabe como fazer isso, qualquer ajuda será apreciada.