Вы можете использовать Linux и POSIX API, так что читать первые Advanced Linux Programming и intro(2)
Вы можете просто запустить команду компиляции с system(3), вы может использовать snprintf(3) для создания командной строки (но остерегайтесь code injection); например
void compile_program_by_number (int i) {
assert (i>0);
char cmdbuf[64];
memset(cmdbuf, 0, sizeof(cmdbuf));
if (snprintf(cmdbuf, sizeof(cmdbuf),
"gcc -Wall -g -O program%d.c fun.c -o p%d",
i, i)
>= sizeof(cmdbuf)) {
fprintf(stderr, "too wide command for #%d\n", i);
exit(EXIT_FAILURE);
};
fflush(NULL); // always useful before system(3)
int nok = system(cmdbuf);
if (nok) {
fprintf(stderr, "compilation %s failed with %d\n", cmdbuf, nok);
exit(EXIT_FAILURE);
}
}
BTW, ваша программа может сгенерировать код на Си, то fork
+ execve
waitpid
+ в gcc
компилятор (или make
), то, возможно, даже dlopen(3) результат компиляции (вам потребуется gcc -fPIC -shared -O foo.c -o foo.so
компилировать a dlopen
способный общий объект ...). MELT делает точно это. (а также мой manydl.c, который показывает, что вы можете сделать большой кусок dlopen
-s ...)
слишком широкий .. и требует много усилий. – Steve
_ "Это то, что я экспериментировал с" _. И на какие проблемы вы столкнулись? Неясно, каков ваш реальный вопрос. – Michael