2011-12-17 10 views
2

これは私を困惑させる質問です。 javahは、ヘッダを生成するために、バイトコードでコンパイルされたクラスのクラスパスが必要です。javahがJNIヘッダを生成するためにバイトコードを必要とするのはなぜですか?

しかし、javacがありますが、これはおそらくjavahでも使用できるソースコードからASTを作成していると思われます。特に、ネイティブメソッドが簡単に検出されるためです。

なぜ、javahにバイトコードが必要なのですか?

答えて

5

それは彼らがそれを書いた方法です。私は同意する、それは絶対にがソース上で動作するように書かれている可能性がありますが、それは彼らがしたものではありません。

それが書かれたある方法について多少興味深いのは、あなたがソースを持っていません場合、あなたは(最初にそれをコンパイルすることによって)ソースを持っている場合は、それを使用したりできることです。それは実際に行われている方法が実際にであることを意味します。フレキシブルで、それほどです。

+0

これは当てはまりますが、一方ではJNIビルドプロセスが次のように複雑になります。/ – fge

+0

@fgeそうではありません。 .javaを.classにコンパイルするコンパイラが1つあります。 .classを.cと.hに処理する一つのjavahがあります。 javahをコンパイラにするとjavacとjavacの相違の危険があります。 – EJP

+0

@EJPはコードを共有していません!しかし、とにかく...私はそれを処理する必要があることを知っている:/ – fge

関連する問題