Есть ли способ скомпилировать дополнительный код во время выполнения на C или C++?

Вот что я хочу сделать:

  1. Запустить программу и инициализировать некоторые структуры данных.
  2. Затем скомпилируйте дополнительный код, который может получить доступ к существующим структурам данных или изменить их.
  3. При необходимости повторите шаг 2.

Я хочу иметь возможность делать это как с C, так и с C++, используя gcc(и, в конечном итоге, Java) в Unix- как системы (особенно Linux и Mac OS X). Идея состоит в том, чтобы в основном реализовать цикл чтения-оценки-печати для этих языков, который компилирует выражения и операторы по мере их ввода и использует их для изменения существующих структур данных (то, что делается все время в языках сценариев). Я пишу этот инструмент на python, который генерирует файлы C/ C++, но это не должно иметь значения.

Я пытался сделать это с разделяемыми библиотеками, но узнал, что изменение разделяемых библиотек не влияет на программы, которые уже запущены. Я также пытался использовать общую память, но не смог найти способ загрузить функцию в кучу. Я также рассматривал возможность использования ассемблерного кода, но еще не пытался это сделать.

Я бы предпочел не использовать какие-либо другие компиляторы, кроме gcc, если нет абсолютно никакой возможности сделать это в gcc.

Если у кого-то есть идеи или кто знает, как это сделать, будем признательны за любую помощь.

15
задан Matt 12 May 2012 в 14:39
поделиться