.javaファイルをC++プログラムでコンパイルすることはできますか(.javaファイルが与えられたと仮定します)?もしそうなら、どうですか?C++を使用して.javaファイルをコンパイルする方法
答えて
C++を使用してJavaモジュールをコンパイルすることは可能です。 UNIX/Linuxでは、C++にfork()
/exec()
C関数を使用して、javac
コンパイラを別のプロセスで起動させることができます。 Windowsでは、CREATEPROCESS機能を使用できます。
その他の手法には、シェルを起動してからjavac
を呼び出す方法があります。これは、入出力プログラムを「起動」プログラムと統合するための作業をしたくないときに使用されます。
C/C++プロセスで既存のJNI(Java Native Interface)を使用してJVMを開始することもできます。そのようなソリューションの下では、新しいJava 1.6の機能を使用してツールチェーンコンパイラを入手できます。コンパイラを手に入れたら、JNI呼び出しを介してソースコードをコンパイルして呼び出すことができます。
javac
プログラムはオープンソースです。正しい条件(GPLと互換性のあるものを開発している場合)では、HotSpotコードをプログラム内に直接組み込むことができます。
最後に、Javaの小さなサブセットのみをコンパイルする場合は、独自のコンパイラも作成できます。 JVMバイトコードは非常に分かりやすく、クラスファイル形式は一般にアクセス可能です。
あなたが含まれ、あなたのC++プログラム内でコンパイルされたJavaクラスを実行することを意味すると仮定すると:
あなたはほとんど逆に問題を解決するために使用されるJNIを使用することができます(、Javaからネイティブコードを実行しています)。
http://java.sun.com/docs/books/jni/html/invoke.html JavaコードでJNI環境を作成する方法とメソッドを呼び出す方法の詳細については、http://java.sun.com/docs/books/jni/html/invoke.htmlを参照してください。
+1 JVMのJNIキックスタートについては、コンパイラをつかむための機能が最近になって導入されたことを忘れないでください。 –
私はOPが本当にC++からJavaソースコードをコンパイルしたいとは思っていませんが、「javaをC++にコンパイルしたい」と思っていました。つまり、クラスファイルからjavaバイトコードを実行するだけです。 – mvds
私はOPが本当にJavaをC++にコンパイルしたいとは思っていません。つまり、C++にJavaをコンパイルする方法を説明しました。 –
は、あなたのアプリケーション内でJVMを埋め込み、JavaCompiler
のメソッドを取得し、呼び出すために(未テスト)JNIの少しを書き込むことによってこれを行うことができます。
jclass provider = env->FindClass("javax/tools/ToolProvider");
jmethodID providermid = env->GetStaticMethodID(provider, "getSystemJavaCompiler", "()Ljavax/tools/JavaCompiler");
jobject compiler = env->CallStaticVoidMethod(provider, providermid);
jclass cls = env->GetObjectClass(compiler);
jmethodID compilermid = env->GetMethodID(cls, "run", "(Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/OutputStream;[Ljava/lang/String;)I");
jstring filename = env->NewStringUTF(env, "my_file.java");
env->CallIntMethod(compiler, compilermid, NULL, NULL, NULL, filename);
コンパイラはToolProvider
から見上げました。 JNI経由でC++に
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, "my_file.java");
:
だから基本的には以前のC++コードは、直接翻訳したものです。
インクルードファイルには、通常、 'JavaCompiler'のようなクラスがありますか? – hirschhornsalz
@drhirsch私が知っているインクルードファイルでは、 'JavaCompiler'クラスは見つかりません。この例は '#include
- 1. Javaファイル内のコードを使用してJavaファイルをコンパイルする
- 2. Xcodeでswiftを使用してJavaコードをコンパイルする方法
- 3. java 8を使用してinstall4jcをコンパイルする方法
- 4. C++を使用してクロスプラットフォーム実行可能ファイルをコンパイルする方法
- 5. .aファイルを使用してcファイルをコンパイルするコマンド
- 6. .NET Frameworkライブラリを使用してC++プログラムをコンパイルする方法
- 7. iostreamを使用してC++コードをコンパイルする方法
- 8. TR1を使用してMac OSでC++をコンパイルする方法
- 9. build.xmlファイルを使用してResourceBundleクラスをコンパイルする方法
- 10. 共有ライブラリを使用してファイルをコンパイルする方法は?
- 11. nanobを使用して.proto + .optionsファイルをコンパイルする方法
- 12. IDEなしでMicrosoft C++コンパイラを使用してC++ライブラリをコンパイルする方法
- 13. システムコールでCファイルをコンパイルする方法
- 14. Javaを使用してXML Webserviceを使用してファイルをアップロードする方法
- 15. Corelinuxを使用してC++をコンパイルして実行する方法
- 16. LinuxでOpenNI用のJavaファイルをコンパイルして実行する方法
- 17. eclipseでJava以外の拡張ファイルを使用してJavaコードをコンパイルする
- 18. C、C++、Javaファイルを一度にコンパイルするmakefileの作成方法
- 19. Eclipseを使用していくつかのJavaファイルをコンパイルする方法を教えてください。
- 20. javaを使用して.earファイルを解凍する方法
- 21. Jacob(Java)を使用してExcelファイルを保存する方法
- 22. Javaを使用してXMLファイルをソートする方法
- 23. javaを使用して.docファイルを作成する方法は?
- 24. javaを使用してビデオをファイルにダウンロードする方法は?
- 25. Javaを使用してファイルを移動する方法
- 26. Javaを使用してJSONファイルを更新する方法
- 27. CSVをJavaを使用してファイルにダウンロードする方法
- 28. Javaを使用してXMLファイルを作成する方法は?
- 29. Java GoogleドライブAPIを使用してファイルをアップロードする方法
- 30. Java Webサービスを使用してファイルをアップロードする方法
コマンドラインを実行しますか? javac –
またはJava言語用にC++でコンパイラを書くことができます; – hage
なぜこれをやろうとしていますか? – Tom