Как скомпилировать код C ++ во время выполнения (например, eval в Python)? - PullRequest
0 голосов
/ 28 марта 2019

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

//Open a file
std::ofstream fout("SOURCECODEPATH");

//Write actual function to file
fout << "extern \"C\" void testFunc(float testArray[]) {\n"
        "    testArray[0] = 1.0;\n"
        "    testArray[1] = 2.0;\n"
        "    testArray[2] = 3.0;\n"
        "}" << std::endl;

//Compile the file, and write the stdout and stderr to PROCESSOUTPUTPATH using "&>"
system("c++ -shared -fPIC -std=c++14 SOURCECODEPATH -o COMPILEDLIBRARYPATH &> PROCESSOUTPUTPATH");

//Read PROCESSOUTPUTPATH (not implemented)

В настоящее время он создает 3 файла: SOURCECODEPATH , COMPILEDLIBRARYPATH и PROCESSOUTPUTPATH ​​.Однако я бы предпочел не иметь SOURCECODEPATH и PROCESSOUTPUTPATH ​​, записанные в ОС, а скорее использовать их для внутреннего использования.Поэтому передайте (?) Исходный код процессу и верните результат (желательно разделить на stderr и stdout).Какой самый простой способ сделать это?

1 Ответ

2 голосов
/ 28 марта 2019

Пожалуйста, пересмотрите то, что вы делаете.C ++ и Python очень разные языки во многих отношениях, не в последнюю очередь в своих моделях сборки и исполнения.Кажется очень маловероятным, что компиляция во время выполнения является реальным решением вашей основной проблемы (которой вы не поделились с нами).Проще говоря, C ++ не был разработан для поддержки этого, Python был.

Технически, есть несколько решений для компиляции во время выполнения C ++ , но они требуют гораздо больше управления и усилий, чем eval в Python.Однако они довольно специализированы и, опять же, вряд ли будут хорошим решением вашей основной проблемы.

...