lLVMを使用してC++アプリケーションをJavaバイトコードに移植することは、どの程度実行可能ですか(おそらくLLJVMでしょう)。
現在のところ、プロセスはC++で記述されていますが、新しいクライアントでは、マルチプラットフォームでプログラムを実行できるようにする必要がありますsing Java Virtual Machine with明らかにネイティブコードはありません(JNIはありません)。アイデアは、生成されたjarを取得して別のシステム(Linux、Win、32ビット-64ビット)にコピーできるようにすることであり、正常に機能するはずです。
周りを見回すと、C++をLLVM IRコードにコンパイルし、そのコードをJavaバイトコードにコンパイルすることが可能であるように見えます。生成されたコードを読み取り可能にする必要はありません。
私はemscriptenを使用して同様のもので少しテストしました。これはC++コードを取り、それをJavaScriptにコンパイルします。結果は有効なJSですが、完全に読み取ることはできません(アサンブラーのように見えます)。
いくつかのコメントの後に私のポイントをより明確にするために、おそらくポートが十分に使用されていない可能性があります。結果として、可読ソースコードは期待できません。Javaバイトコードだけなので、開発される「ポート」ではありません。もはや、ターゲットプラットフォームはJava JVMでなければならず、ネイティブアサンブラーではありません。
注:現在、いくつかの非標準C++およびクローズソースライブラリがあることを承知しています。この非標準コードおよびすべてのクローズソースライブラリを削除し、無料のLibreオープンソースソフトウェアを使用する予定です。したがって、すべてのコードが標準C++コードであると仮定しましょうコンパイル時に利用可能なすべてのコード。
注2:移植可能なC++コードを記述して、それを目的のターゲットプラットフォームにコンパイルするオプションではありません。コンパイルされたプログラムはマルチプラットフォームでなければならず、したがってJVMを使用します。
注3:現在、Pythonまたは他の言語ベースに適用される同様のソリューションについては検討していませんが、それについても聞きたいと思います。これにより、ターゲット実行可能ファイルはJavaバイトコードである必要がありますが、C++を有効なpythonコンパイル済みコードにコンパイルするオプションがある場合は、それらについても聞きたいと思います。
これがうまくいくとは思えません。コードをJavaバイトコードに変換することはできますが、ライブラリの呼び出しをJavaランタイムおよびライブラリへの同等の呼び出しに魔法のように変換することはできません。 Javaランタイムコールです!独自のライブラリをすべて削除しても、C++標準ライブラリのままです。
これを具体的にするには、C++プログラムにfprintf()の呼び出しが含まれている場合があります。その関数はC標準ライブラリに実装されており、C++プログラムがそれを呼び出すことは完全に合法です。 LLVMからLLJVMへのトランスレータは、おそらくJavaランタイムコールのシーケンスを魔法のように理解して、fprintf()と同等の結果を生成し、それらを置き換えます。)この機能を提供するには、基本的に、CおよびC++ランタイムをJavaバイトコードで再実装します。
C++からJavaへの変換を実行する 一部のツール がありますが、変換されるのは少数の単純なランタイムライブラリ呼び出しだけです。残りは理解するためにあなたに任されています。