これはコマンドaarch64-linux-gnu-gcj-5であり、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できます。
プログラム:
NAME
gcj-Java言語用の事前コンパイラ
SYNOPSIS
GCJ [-IDIR...] [-d DIR...]
[--クラスパス=path] [-クラスパス=path]
[-fオプション...] [- エンコーディング=名]
[- 主要=クラス名] [-D名[=値] ...]
[-C] [- 資源 リソース名] [-d ディレクトリにジョブを開始します。]
[-W警告する...]
ソースファイル...
DESCRIPTION
As GCJ のもうXNUMXつのフロントエンドです gccの、gccと同じオプションの多くをサポートします。
このマニュアルは、に固有のオプションのみを文書化しています GCJ.
OPTIONS
入力 と 出力 ファイル
A GCJ コマンドは gccの コマンド、それはいくつかのオプションとファイルで構成されています
名前。 次の種類の入力ファイル名がサポートされています。
file.Java
Javaソースファイル。
file。クラス
Javaバイトコードファイル。
file.zip
file。ジャー
XNUMXつ以上の「.class」ファイルを含むアーカイブ。これらはすべてコンパイルされています。 NS
アーカイブは圧縮されている可能性があります。 で終わらないアーカイブ内のファイル 。クラス
リソースファイルとして扱われます。 それらは、次のように結果のオブジェクトファイルにコンパイルされます。 芯:
URL。
@file
入力ファイル名の空白で区切られたリストを含むファイル。 (現在、これら
すべて「.java」ソースファイルである必要がありますが、変更される可能性があります。)名前付きファイルはそれぞれコンパイルされます。
まるでコマンドラインにあるかのように。
ライブラリ.a
ライブラリ。そう
-lライブラリ名
リンク時に使用するライブラリ。 を参照してください gccの マニュアル。
で複数の入力ファイルを指定できます GCJ コマンドライン。この場合、
すべてコンパイルされます。 「-o」を指定した場合 ファイル名" オプションの場合、すべての入力ファイルは
一緒にコンパイルされ、名前が付けられた単一の出力ファイルが生成されます ファイル名。 これも許可されます
「-S」または「-c」を使用する場合。ただし、「-C」または「--resource」を使用する場合は使用できません。 (これは拡張機能です
何の平野を超えて gccの 許可します。)(複数の入力ファイルが指定されている場合は、すべてが
現在は「.java」ファイルですが、これを修正したいと考えています。)
入力 オプション
GCJ 必要なファイルを探す場所を制御するオプションがあります。 例えば、 GCJ かもしれない
コンパイルを要求されたファイルによって参照されるクラスをロードする必要があります。 お気に入り
Java言語用の他のコンパイラ、 GCJ の概念があります class path。 がある
クラスパスを操作するために使用できるいくつかのオプションと環境変数。
日時 GCJ 特定のクラスを検索し、一致するクラスパスを検索します 。クラス
or .Java ファイルにソフトウェアを指定する必要があります。 GCJ インストールされたものを指す組み込みのクラスパスが付属しています
libgcj.jar、すべての標準クラスを含むファイル。
以下のテキストでは、ディレクトリまたはパスコンポーネントは実際のディレクトリを参照できます
ファイルシステム上、または .zip or 。ジャー ファイル、これ GCJ それがであるかのように検索します
ディレクトリにあります。
-IDIR
「-I」で指定されたすべてのディレクトリは順番に保持され、クラスパスの先頭に追加されます
他のすべてのオプションから構築されます。 「javac」などのツールとの互換性がない限り
重要です。他のオプションの代わりに常に「-I」を使用することをお勧めします。
クラスパスの操作。
--classpath =path
これにより、クラスパスがに設定されます path、パスのコロンで区切られたリスト(Windowsベースの場合)
システム、パスのセミコロン区切りのリスト)。 これは組み込みをオーバーライドしません
(「ブート」)検索パス。
--CLASSPATH =path
「--classpath」の非推奨の同義語。
--bootclasspath =path
「java.lang.String」などの標準の組み込みクラスの場所。
--extdirs =path
のディレクトリごとに path、そのディレクトリの内容を最後に配置します
クラスパス。
クラスパス
これは、パスのリストを保持する環境変数です。
最終的なクラスパスは次のように構成されます。
*最初に「-I」で指定されたすべてのディレクトリが表示されます。
* もしも -クラスパス 指定すると、その値が追加されます。 それ以外の場合、「CLASSPATH」の場合
環境変数を指定すると、その値が追加されます。 それ以外の場合、現在
ディレクトリ( "。")が追加されます。
*「-bootclasspath」が指定されている場合は、その値を追加します。 それ以外の場合は、組み込みを追加します
システムディレクトリ、 libgcj.jar.
*最後に、「-extdirs」が指定されている場合は、指定された内容を追加します
クラスパスの最後にあるディレクトリ。 それ以外の場合は、の内容を追加します
「$(prefix)/ share / java / ext」にある組み込みのextdir。
によって構築されたクラスファイル GCJ クラス「java.lang.Object」の場合(および「libgcj.jar」に配置されます)
特別な長さゼロの属性「gnu.gcj.gcj-compiled」が含まれています。 コンパイラは
「java.lang.Object」をロードするときにこの属性が見つかりません。見つからない場合はエラーを報告します。
バイトコードにコンパイルされない限り(オプション「-fforce-classes-archive-check」を使用して
この特定の場合、この動作をオーバーライドします。)
-fforce-classes-archive-check
これにより、コンパイラは常に特別なゼロ長属性をチェックするようになります。
「java.lang.Object」の「gnu.gcj.gcj-compiled」で、見つからない場合はエラーを発行します。
-fsource =VERSION
このオプションは、によって受け入れられるソースバージョンを選択するために使用されます GCJ。 デフォルトは 1.5.
エンコーディング
Javaプログラミング言語は全体を通してUnicodeを使用します。 うまく統合するために
他のロケールでは、 GCJ ことができます .Java ほとんどすべてのエンコーディングを使用して書き込まれるファイル。 GCJ
コンパイル時にこれらのエンコーディングを内部エンコーディングに変換する方法を知っています。
「--encoding =」を使用できます名前" (特定の文字の)エンコーディングを指定するオプション
set)ソースファイルに使用します。 これが指定されていない場合、デフォルトのエンコーディングは
現在のロケール。 ホストシステムのロケールサポートが不十分な場合は、 GCJ
デフォルトのエンコーディングは UTF-8 Unicodeのエンコーディング。
「--encoding」を実装するには、 GCJ ホストプラットフォームの「iconv」変換ルーチンを使用するだけです。
これは、実際には GCJ ホストプラットフォームの機能によって制限されます。
引数「--encoding」に使用できる名前は、プラットフォームごとに異なります(
どこにも標準化されていません)。 しかし、 GCJ 名前の付いたエンコーディングを実装します UTF-8
内部的には、これをソースファイルに使用することを選択した場合は、確実に使用できます。
すべてのホストで動作します。
警告
GCJ いくつかの警告を実装します。 他のジェネリックと同じように gccの 警告、オプションの場合
フォーム「-Wfoo」は警告を有効にし、「-Wno-foo」は警告を無効にします。 ここでは、
効果のある警告の形式を文書化します。デフォルトは
リストされているものの反対。
-冗長修飾子
この旗で、 GCJ 冗長な修飾子について警告します。 たとえば、警告します
インターフェイスメソッドが「パブリック」と宣言されている場合。
-Wextraneous-セミコロン
これは〜をひき起こす GCJ 空のステートメントについて警告します。 空のステートメントは
非推奨。
-古いものではありません
このオプションにより、 GCJ ソースファイルが一致するものよりも新しい場合に警告しない
クラスファイル。 デフォルトでは GCJ これについて警告します。
-Wno-非推奨
非推奨のクラス、メソッド、またはフィールドが参照された場合に警告します。
-未使用
これはと同じです gccのの「-Wunused」。
-壁
これは、「-Wredundant-modifiers-Wextraneous-semicolon-Wunused」と同じです。
連結
Javaアプリケーションを実行可能プログラムに変換するには、Javaアプリケーションを必要なものとリンクする必要があります
ライブラリ、CまたはC ++の場合と同じです。 リンカはデフォルトで、という名前のグローバル関数を探します
"主要"。 Javaにはグローバル関数がないため、Javaクラスのコレクションは
「main」メソッドを持つクラスが複数ある場合は、リンカーに次のクラスを通知する必要があります。
アプリケーションの起動時に呼び出す必要のある「メイン」メソッド。 あなたはでそれを行うことができます
これらの方法のいずれか:
*アプリケーションをリンクするときに、目的の「メイン」メソッドを含むクラスを指定します。
以下で説明する「--main」フラグを使用します。
* Javaパッケージを実行可能ファイルではなく共有ライブラリ(dll)にリンクします。 それで
「gij」プログラムを使用してアプリケーションを呼び出し、「gij」が
必要なライブラリ。
*「メイン」ルーチンでリンクするフラグ「-lgij」を使用してJavaパッケージをリンクします
「gij」コマンドから。 これにより、「メイン」メソッドを使用するクラスを選択できます。
アプリケーションを実行するときに実行したい。 他の「gij」フラグを使用することもできます。
プロパティを設定するための「-D」フラグ。 (「gij」ではなく「-lgij」ライブラリを使用する
前のメカニズムのプログラム)にはいくつかの利点があります:それは静的と互換性があります
リンクし、ライブラリを構成またはインストールする必要はありません。
これらの「gij」オプションは、実行可能ファイルのリンクに関連しています。
--main =クラス名
このオプションは、「main」メソッドを持つクラスの名前を指定するためにリンクするときに使用されます
結果の実行可能ファイルが実行されるときに呼び出す必要があります。
-D名[=値]
このオプションは、「-main」でのみ使用できます。 これは、という名前のシステムプロパティを定義します 名
価値あり 値。 場合 値 指定されていない場合、デフォルトで空の文字列になります。
これらのシステムプロパティは、プログラムの起動時に初期化され、取得できます。
実行時に「java.lang.System.getProperty」メソッドを使用します。
-lgij
コマンドライン処理が「gij」コマンドの処理であるアプリケーションを作成します。
このオプションは、「-main」を使用する代わりの方法です。 両方を使用することはできません。
-静的-libgcj
このオプションにより、静的バージョンのlibgcjランタイムに対してリンクが実行されます。
図書館。 このオプションは、対応するリンカーサポートが存在する場合にのみ使用できます。
ウォールタイム - libgcjの静的リンクにより、libgcjの重要な部分が省略される場合があります。
libgcjの一部は、実行時にクラスをロードするためにリフレクションを使用します。 リンカーは
リンク時にこれらの参照が表示されない場合は、参照されるクラスを省略できます。 NS
結果は通常(常にではありませんが)実行時にスローされる「ClassNotFoundException」です。
このオプションを使用する場合は注意が必要です。 詳細については、以下を参照してください。
<http://gcc.gnu.org/wiki/Statically%20linking%20libgcj>
Code 世代
多くに加えて gccの コード生成を制御するオプション、 GCJ いくつかのオプションがあります
それ自体に固有です。
-C このオプションは、次のように伝えるために使用されます GCJ バイトコードを生成するには(。クラス ファイル)オブジェクトではなく
コード。
- 資源 リソース名
このオプションは、次のように伝えるために使用されます GCJ 特定のファイルの内容をオブジェクトコードにコンパイルします
したがって、実行時にコアプロトコルハンドラを使用してアクセスできます。 芯:/資源-
名。 ご了承ください リソース名 実行時に検出されたリソースの名前です。 にとって
たとえば、「ResourceBundle.getBundle」の呼び出しで使用できます。 実際のファイル
この方法でコンパイルする名前は、個別に指定する必要があります。
-ftarget =VERSION
これはで使用することができます -C によって発行されたバイトコードのバージョンを選択するには GCJを選択します。
デフォルトは 1.5。 バイトコードを生成しない場合、このオプションは効果がありません。
-d ディレクトリにジョブを開始します。
「-C」と一緒に使用すると、すべてが生成されます 。クラス に入れるファイル
の適切なサブディレクトリ ディレクトリにジョブを開始します。。 デフォルトでは、サブディレクトリに配置されます
現在の作業ディレクトリの。
-fno-bounds-チェック
デフォルトでは、 GCJ すべての配列インデックスの境界をチェックするコードを生成します
オペレーション。 このオプションを使用すると、これらのチェックが省略され、パフォーマンスが向上する可能性があります
配列を広範囲に使用するコードの場合。 これにより、予測できない結果になる可能性があることに注意してください
問題のコードが実際に配列境界の制約に違反している場合の動作。 それ
コードが決してスローしないことが確実な場合は、このオプションを使用しても安全です
「ArrayIndexOutOfBoundsException」。
-fno-store-check
配列ストアチェックを生成しないでください。 オブジェクトを配列に格納する場合、ランタイムチェック
通常、オブジェクトが割り当てと互換性があることを確認するために生成されます
配列のコンポーネントタイプ(コンパイル時に認識されない場合があります)。 これとともに
オプションの場合、これらのチェックは省略されます。 これにより、保存するコードのパフォーマンスを向上させることができます
オブジェクトを頻繁に配列に入れます。 確信がある場合は、このオプションを使用しても安全です。
コードが「ArrayStoreException」をスローすることはありません。
-fjni
連絡先 GCJ ネイティブメソッドを作成するには、CNIとJNIのXNUMXつのオプションがあります。 デフォルトでは
GCJ CNIを使用していることを前提としています。 ネイティブメソッドを使用してクラスをコンパイルする場合、および
これらのメソッドはJNIを使用して実装されるため、「-fjni」を使用する必要があります。 このオプション
原因 GCJ 基礎となるJNIメソッドを呼び出すスタブを生成します。
-fno-assert
「assert」キーワードを認識しないでください。 これは古いバージョンとの互換性のためです
言語仕様の。
-fno-optimize-static-class-initialization
最適化レベルが「-O2」以上の場合、 GCJ 最適化しようとします
ランタイムへの呼び出しは、最初の使用時に静的クラスを初期化するために行われます。
(「-C」が指定されている場合、この最適化は実行されません。)ネイティブにコンパイルする場合
コード「-fno-optimize-static-class-initialization」は、この最適化をオフにします。
使用中の最適化レベルに関係なく。
--disable-assertions [=クラスまたはパッケージ]
コンパイルされたコードにアサーションをチェックするためのコードを含めないでください。 もしも
"=クラスまたはパッケージ」 欠落していると、すべてのクラスのアサーションコード生成が無効になります。
より具体的な「--enable-assertions」フラグによってオーバーライドされない限り。 もしも クラスまたはパッケージ
はクラス名であり、指定されたクラス内でのアサーションチェックの生成のみを無効にします。
その内部クラス。 もしも クラスまたはパッケージ パッケージ名であり、生成を無効にします
名前付きパッケージまたはサブパッケージ内のアサーションチェック。
デフォルトでは、クラスファイルを生成するとき、または最適化しないときにアサーションが有効になります。
最適化されたバイナリを生成する場合は無効になります。
--enable-assertions [=クラスまたはパッケージ]
アサーションをチェックするためのコードを生成します。 まだ必要なため、オプションの名前が間違っている可能性があります
実行時にアサーションチェックをオンにするため、簡単な方法はサポートされていません
それ。 したがって、このフラグは、部分的にオーバーライドすることを除いて、まだあまり役に立ちません。
「--disable-assertions」。
-findirect-ディスパッチ
GCJ 特別なバイナリ互換性ABIがあり、これは
「-findirect-dispatch」オプション。 このモードでは、によって生成されたコード GCJ を尊重します
Java言語仕様でのバイナリ互換性保証、およびその結果
オブジェクトファイルは、それらの依存関係に対して直接リンクする必要はありません。 その代わり、
すべての依存関係は実行時に検索されます。 これにより、インタプリタとインタプリタの自由な混合が可能になります
コンパイルされたコード。
現在、「-findirect-dispatch」はコンパイル時にのみ使用できることに注意してください 。クラス
ファイル。 ソースからコンパイルする場合は機能しません。 CNIもまだ動作していません
バイナリ互換性ABI。 これらの制限は将来解除される予定です
リリース。
ただし、標準のABIを使用してCNIコードをコンパイルする場合は、コードから呼び出すことができます。
バイナリ互換性ABIで構築されています。
-fbootstrap-クラス
このオプションは、コンパイルされたクラスがによってロードされるべきであることを「libgcj」に伝えるために使用できます。
システムクラスローダーではなく、ブートストラップローダー。 デフォルトでは、クラスをコンパイルする場合
実行可能ファイルにリンクすると、を使用してロードされたかのように扱われます。
システムクラスローダー。 これは便利です。
「Class.forName()」は検索します クラスパス 目的のクラスを見つけます。
-減らされた反射
このオプションにより、によって生成されたコードが発生します GCJ クラスの削減された量を含むために
ランタイムリフレクションをサポートするために使用されるメタデータ。 この節約のコストは、
標準のJavaランタイムの特定のリフレクション機能を使用する機能
環境。 正しい取得に必要なものを除くすべてのメタデータを設定する場合
実行時のセマンティクスは削除されます。
リフレクションを使用しないコードの場合(つまり、シリアル化、RMI、CORBA、または呼び出しメソッド
「java.lang.reflect」パッケージ)では、「-freduced-reflection」は適切な結果になります
実行可能コードサイズを節約した操作。
JNI( "-fjni")およびバイナリ互換性ABI( "-findirect-dispatch")は機能しません
フルリフレクションメタデータなしで適切に。 このため、使用するのはエラーです
これらのオプションには「-freduced-reflection」が付いています。
ウォールタイム - リフレクションメタデータがない場合、「SecurityManager」を使用するコードは
正しく動作しません。 また、呼び出し元のメソッドに次のような場合、「Class.forName()」の呼び出しが失敗する可能性があります
リフレクションメタデータはありません。
構成時間 オプション
一部 GCJ コード生成オプションは、結果のABIに影響を与えるため、
ランタイムパッケージである「libgcj」が構成されている場合に意味があります。 「libgcj」は
このグループからの適切なオプション スペック によって読み取られるファイル GCJ。 これらのオプション
完全を期すためにここにリストされています。 「libgcj」を使用している場合は、触れたくないでしょう
これらのオプション。
-fuse-ベーム-gc
これにより、BoehmGCビットマップマーキングコードを使用できるようになります。 特にこれは原因です
GCJ オブジェクトマーキング記述子を各vtableに配置します。
-fhash-同期
デフォルトでは、同期データ(「同期」、「待機」、および
「通知」)は、各オブジェクト内の単語によって示されます。 このオプションで GCJ と仮定します
この情報は、オブジェクト自体ではなく、ハッシュテーブルに格納されます。
-ヒューズ-分割-サブルーチン
一部のシステムでは、整数除算を実行するためにライブラリルーチンが呼び出されます。 これは
ゼロ除算時に例外処理を正しく行うために必要です。
-fcheck-参照
一部のシステムでは、オブジェクトにアクセスするたびにインラインチェックを挿入する必要があります
参照を介して。 他のシステムでは、nullポインタがアクセスするため、これは必要ありません。
プロセッサによって自動的にキャッチされます。
-fuse-atomic-builtins
一部のシステムでは、GCCは組み込みのアトミック操作用のコードを生成できます。 これを使って
Javaコードをコンパイルするときにgcjがこれらのビルトインを使用するように強制するオプション。 これはどこ
機能が存在する場合は自動的に検出されるため、通常は必要ありません
このオプションを使用します。
onworks.netサービスを使用してオンラインでaarch64-linux-gnu-gcj-5を使用する