1

GTKヘッダーファイルを必要とする単純なANSICプログラムをコンパイルしようとしています。

GCCでコンパイルするときにソースコードをgtk.hにリンクする方法を知っています。

私の質問は、GTKヘッダーファイルが欠落していることを考慮して、gedit(GTK lib)などのアプリケーションがシステムで実行されているのはなぜですか?おそらく、GeditはGTKライブラリを備えたシステムでコンパイルされました。しかし、Geditが実行中にシステムにヘッダーファイルを必要としないのはなぜですか?

プログラムをコンパイルするJavaプログラマーとして、クラスファイルは常にメインの実行可能ファイルと一緒にパッケージ化する必要があります。また、ターゲットシステムにJVMをインストールする必要があります。

有益なご回答ありがとうございます。

4

2 に答える 2

5

しかし、Gedit が実行中にシステムにヘッダー ファイルを必要としないのはなぜですか?

ヘッダー ファイルは、前処理段階でのみ必要です。プリプロセッサがそれらの処理を完了すると、コンパイラはそれらを認識することさえありません。明らかに、ターゲット システムは実行のためにそれらを必要としません (.c​​ ファイルが必要ないのと同じように)。

おそらくライブラリのことを考えているでしょうし、その通りです。実際、プログラムが動的にリンクされていて、ターゲット環境に必要なライブラリが適切な場所に適切なバージョンで含まれていない場合、プログラムは実行されません。ほとんどのシステムで確実に実行されるようにする 1 つの方法は、静的にリンクすることですが、これは実行可能ファイルを肥大化させ、メモリの使用効率を低下させます。

また、ターゲット システムに JVM をインストールする必要があります。

C の場合は、コンパイルするとネイティブ コードが得られるため、そのようなものは必要ありません。ネイティブ コードは、Java から取得する中間のもの (バイトコード) とは大きく異なります。インタープリターのようなものは必要ありません。バイナリーを CPU に渡すだけで、その役割を果たします。

于 2013-02-14T21:56:13.657 に答える
4

ヘッダー ファイルから実行可能ファイルが必要とするものはすべて、コンパイル時に実行可能ファイルに組み込まれます。C では、ヘッダー ファイルは、参照されてからコンパイルされるときに、ソース ファイルにそのままインクルードされます。

于 2013-02-14T21:54:55.923 に答える