Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否能够编译一个C++;通过字符串的源代码?_Java_C++_Compilation - Fatal编程技术网

Java 我是否能够编译一个C++;通过字符串的源代码?

Java 我是否能够编译一个C++;通过字符串的源代码?,java,c++,compilation,Java,C++,Compilation,我知道java源代码可以使用JavaCompiler通过字符串进行编译。使用包含java代码的长字符串,我可以测试代码是否可编译 资料来源: 例如: 我的问题是:我有一个长字符串,包含可编译的C++代码。我是否能够使用某种形式的java库来做类似的事情,还是根本不可能 谢谢 < >编辑1:按要求,字符串可以是用户生成的(在GUI - JTextArea中键入)或从.CPP文件中读取。< P>如果使用VisualStudio,可以使用预生成事件调用C++编译器并编译文件。如果出现错误,将无法生成J

我知道java源代码可以使用JavaCompiler通过字符串进行编译。使用包含java代码的长字符串,我可以测试代码是否可编译

资料来源:

例如:

我的问题是:我有一个长字符串,包含可编译的C++代码。我是否能够使用某种形式的java库来做类似的事情,还是根本不可能

谢谢


< >编辑1:按要求,字符串可以是用户生成的(在GUI - JTextArea中键入)或从.CPP文件中读取。

< P>如果使用VisualStudio,可以使用预生成事件调用C++编译器并编译文件。如果出现错误,将无法生成Java项目。这里的想法是,您正在使事件在构建之前发生。您可以随意创建该事件,例如,检查文件是否编译

以下是一个教程:

<>他在脚本中运行的部分,就是你将调用的位置放到你喜欢的C++编译器上。他不是在检查同一类型的文件,但原理是一样的,他是在检查一个文件

如果您运行的是Windows,如果您使用的是VisualStudio,下面的内容将非常有用

编译命令行上的本地C++程序:

<>基本上,你正在让VisualStudio项目做一个预构建事件,它是在C++代码编译器上的命令调用,在构建java项目之前检查文件。 希望对您有所帮助。

如果您链接到,这里有相关设施

但请注意,LLVM并没有提供稳定的API,因此很难构造继续工作的示例。即使使用C API(仍然需要更新SONAME),我在每个LLVM版本中都遇到了问题

我的问题是:我有一个长字符串,包含可编译的C++代码。

C++ 11标准没有提到任何能够完成这一功能的(编译某些字符串中的C++代码)。我知道没有一个库(除了可能,但我不知道它是否能够编译字符串)能够做到这一点

实际上,C++编译器实际上需要做很多(如果你希望代码运行得不太慢),那么就要花费一些重要的时间(相对于计算机速度,例如,对于一个小的C++源代码来说,几秒钟的时间)来编译生成的C++代码。重编译的C++代码可能需要大量的时间(甚至在病理病例中是无限量的),因为编译。

<>实际上,没有编写C++源文件,你没有任何优势。一些编译器(例如Linux上有代码> G++-XC++/DEV/STDIN/<代码>)能够从标准输入编译C++代码,因此可以使用(POSIX系统)来给C++提供代码。

只需将C++代码写入某个临时C++源文件(可能在某些文件系统中,如果您想避免磁盘IO),或者可能是…并进行编译。在Linux和Posix系统上,您可以(例如,使用

g++-Wall-fPIC-O-shared/tmp/temporary1234.cc-O/tmp/temporary1234.so
)将代码编译成一个“插件”或共享对象,您的主程序稍后可以使用它


如果你正在生成C++代码,你可以考虑使用(而不是生成C++源然后编译它),一些类库,等等…然后,您将生成一些类似于代码的内部表示(具体到JIT库!)。

简而言之:不,C++运行时没有内置编译器。当然,您可以编写代码,通过在输出上运行编译器,将程序的某些输出编译到另一个程序中[至少有些编译器可以使用程序中的
stdout
作为编译器的输入,这样您就不需要实际生成这样的文件]Aww。。谢谢你的回复。。。我的真正目标是当我的程序(使用java)读取C++ java源代码中的代码,并测试输入源代码是否可编译。既然我不能这样做,我想我必须取消这个功能:(…谢谢你的洞察力。你可以将字符串重定向到
gcc
(通过调用
system
)你可以通过创建一个临时文件并调用
系统(“g++temfile.cpp”)来实现
或类似的东西。或者您可以与编译器库集成,例如libclang,它允许您在自己的程序中构建自己的编译器-但这比调用系统要多得多。如果您有gcc,您可能还有
popen
,这是了解源代码是否编译的更好方法。
system有相当有限的反馈。如果你使用Linux,我确信你可以编写一个make文件来编译java和C++程序。如果你在Mac OS上,我不知道该怎么做。实际上它可能是代码> LBCLANA< /COD> >不是代码> LLBLVM