,c++,pipe,system,C++,Pipe,System" /> ,c++,pipe,system,C++,Pipe,System" />

如何编译c++;运行时的代码(如Python中的eval)? 我在运行时编译一些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) //打开一个文件 std::of stream fout(“源代码路径”); //将实际函数写入文件 请重新考虑你在做什么。C++和Python在很多方面都是非常不同的语言,尤其是在构建和执行模型中。运行时编译似乎不太可能是根本问题的真正解决方案(您尚未与我们共享)。简单地说,C++不是设计支持这个的,Python是.< /P>

如何编译c++;运行时的代码(如Python中的eval)? 我在运行时编译一些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) //打开一个文件 std::of stream fout(“源代码路径”); //将实际函数写入文件 请重新考虑你在做什么。C++和Python在很多方面都是非常不同的语言,尤其是在构建和执行模型中。运行时编译似乎不太可能是根本问题的真正解决方案(您尚未与我们共享)。简单地说,C++不是设计支持这个的,Python是.< /P>,c++,pipe,system,C++,Pipe,System,从技术上讲,确实有,但它们需要比Python中的eval更多的管理和努力。但是,它们非常专业,而且也不可能很好地解决您的根本问题。请重新考虑您正在做的事情。C++和Python在很多方面都是非常不同的语言,尤其是在构建和执行模型中。运行时编译似乎不太可能是根本问题的真正解决方案(您尚未与我们共享)。简单地说,C++不是设计支持这个的,Python是.< /P> 从技术上讲,确实有,但它们需要比Python中的eval更多的管理和努力。但是,它们非常专业,而且不太可能是解决潜在问题的好方法。没有可

从技术上讲,确实有,但它们需要比Python中的
eval
更多的管理和努力。但是,它们非常专业,而且也不可能很好地解决您的根本问题。

请重新考虑您正在做的事情。C++和Python在很多方面都是非常不同的语言,尤其是在构建和执行模型中。运行时编译似乎不太可能是根本问题的真正解决方案(您尚未与我们共享)。简单地说,C++不是设计支持这个的,Python是.< /P>
从技术上讲,确实有,但它们需要比Python中的
eval
更多的管理和努力。但是,它们非常专业,而且不太可能是解决潜在问题的好方法。

没有可移植的方法来实现这一点。对于linux,您可以尝试将输出重定向到
/dev/stdout
。另外,您希望如何运行输出?请注意,根据编译器、操作系统和cpu的不同,它将采用不同的二进制格式。所以在我看来,你想做的是没有希望的。最简单的解决方案是编译到dll/so,转储到磁盘,并通过
dlopen
(或等效工具)进行动态加载。此外,您可能还想看看使用LLVM(这是一组工具)进行的JIT。虽然这相当困难。你已经把自己绑在一个特定的平台上了。为什么不在你的程序中加入clang(或g++)呢?那么你根本不需要使用文件。@奇怪的是,AFAIK编译器应该不重要,因为“extern C”应该允许dlopen(或windows等效程序)调用函数。目前我正在编译到.dll/.so(请参阅我的另一个问题,现在有一个链接)。关于CPU和操作系统,由于代码是在运行时编译的,它们将匹配,唯一需要的是主机上的C++编译器。我认为包含clang/g++会复杂得多?没有可移植的方法来实现这一点。对于linux,您可以尝试将输出重定向到
/dev/stdout
。另外,您希望如何运行输出?请注意,根据编译器、操作系统和cpu的不同,它将采用不同的二进制格式。所以在我看来,你想做的是没有希望的。最简单的解决方案是编译到dll/so,转储到磁盘,并通过
dlopen
(或等效工具)进行动态加载。此外,您可能还想看看使用LLVM(这是一组工具)进行的JIT。虽然这相当困难。你已经把自己绑在一个特定的平台上了。为什么不在你的程序中加入clang(或g++)呢?那么你根本不需要使用文件。@奇怪的是,AFAIK编译器应该不重要,因为“extern C”应该允许dlopen(或windows等效程序)调用函数。目前我正在编译到.dll/.so(请参阅我的另一个问题,现在有一个链接)。关于CPU和操作系统,由于代码是在运行时编译的,它们将匹配,唯一需要的是主机上的C++编译器。我认为包括CLAN/G+会更复杂,我意识到C++和Python有很大的不同,它更像是一个隐喻来跨越我所要完成的。我希望用户能够在某些定义良好的点修改程序的行为(用户可以实现特定的功能),但我需要原始性能,因为它是一个渲染引擎。我目前的解决方案与预期的一样,解决了我的问题,但我想去掉这两个临时文件。链接看起来很有趣。我肯定会去看看它,虽然它可能是多余的。考虑到你希望你的“用户”写C++,我认为也很公平地期待他们也能够编译他们自己的共享库。为什么不为您的界面提供一个头文件,让用户提前编写小型共享库和编译小型共享库,然后运行时链接到所需的库?我想我的观点是:为什么运行时编译如此重要?让用户处理调试和任何特定于平台的问题。如果你觉得很慷慨,你可以给他们一个模板cmake项目(或其他什么)和构建说明来帮助他们进行?好问题,我在原文中省略了很多细节,以减少不相关的信息并简化问题。我想允许实验和快速迭代,这就是为什么程序提供了一个(简单的)代码编辑器。然后代码被程序读取/分析(因此它实际上需要源而不是编译库),翻译为有效C++并编译。这些步骤听起来比实际情况复杂得多,它们实际上像一种魅力。对你很好,我不会轻易开始一个项目,但我很高兴它能为你工作。我道歉,我似乎低估了你在我原来的答案(我认为我是从Python拯救受伤的世界新手)我意识到C++和Python是非常不同的,它意味着更多的隐喻,以实现我正在努力实现。我希望用户能够在某些定义明确的点修改程序的行为(用户可以实现特定的功能),但我需要原始pe