如何在运行时(如Python中的eval)编译c ++代码?

时间:2019-03-27 22:49:52

标签: c++ pipe system

我正在运行时编译一些C ++代码,然后在某种插件系统中调用这些代码,另请参见我的other问题。我要做的是创建源代码,将其写入文件,编译该文件,然后将输出写入另一个文件。但是,这个过程有点麻烦,所以我希望能提供一些输入。

//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 个答案:

答案 0 :(得分:2)

请重新考虑您在做什么。 C ++和Python在许多方面都是非常不同的语言,尤其是在它们的构建和执行模型中。看来非常不太可能将运行时编译真正解决您的根本问题(您尚未与我们共享)。简而言之,C ++并非旨在支持此功能,Python则被设计为支持这种功能。

从技术上讲,有a few solutions for runtime compilation of C++,但是与Python中的eval相比,它们需要更多的管理和工作量。但是,它们非常专业,因此再次不可能很好地解决您的基本问题。