2012-03-07 6 views
0

私はcファイルをインクルードすると、他の関数への未定義の参照を取得し始めます。次に、関数を含むcファイルをインクルードする必要があります。これをどうやって回避するのですか?定義されていない参照は、私がインクルードするcファイルで参照されますが、実際にはそれらのファイルを含めていないので、私は未定義の参照を取得します。cファイルをインクルードすると未定義の参照につながる

+0

あなたはCファイル、Hファイルのみを含めるべきではないことは知っていますか? – dasblinkenlight

+0

egidraは#includingを言っていませんでした。おそらくそれはプロジェクトに含めることを意味します。 – Kaz

+0

この文は意味をなさない:「定義されていない参照は、私がインクルードするcファイルで参照されますが、実際にそれらのファイルを含めていないので、定義されていない参照があります。あなたの文章では、代名詞 "それら"は先行する "私が含むファイル"を参照することしかできませんが、あなたは "私は実際にそれらのファイルを含んでいません"と主張します。 – Kaz

答えて

0

一般に、「.c」ファイルではなく「.h」ファイルが含まれます。

.hファイルで宣言された関数を呼び出すと、完全なプログラムを得るために開始Cファイルをコンパイルするだけでは不十分です。また、宣言されたコードを関連付けるオブジェクトファイルをリンクする必要があります機能。これらはライブラリ内に存在する可能性があります。その場合、そのライブラリとリンクする必要があります。

0

あなたは一度にすべてのファイルをコンパイル(gcc *.c)または別のオブジェクトファイルに各.cファイルをコンパイルして、実行可能ファイルにそれらすべてをリンクするのいずれかの必要があります。

gcc -c main.c -o main.o 
gcc -c helper.c -o helper.o 
gcc -c other.c -o other.o 
gcc *.o -o main 

そして、あなたがすべき各.cファイル内.hファイルのみが含まれます。

0

これを含めるとどういう意味ですか? #includeプリプロセッサディレクティブを使用してインクルードするか、プロジェクトに追加するときと同じようにインクルードします。

プログラム内で呼び出される関数(または一般的には、参照される外部シンボル)がそのプログラムに含まれていなければならない、または明示的または暗黙的にプログラムにリンクされています。

すべての参照が解決されるまで、必要なソースファイルを追加してください。

できない場合は、プログラムまたはビルドに何らかの問題がある可能性があります。プログラムが不完全(ソースファイルが見つからない)か、破損しているか(ソースファイルの一部が欠落している)、不適切なソースファイルをビルドに含めた場合(例えば、プログラムがUnix用にコンパイルされている場合に必要なソースファイル、 (つまり、間違ったプラットフォーム用のコードを条件付きでコンパイルしています)、プログラムが単にあなたのシステムに移植されていない(あなたが持っていないライブラリ関数への参照をしています)。

関連する問題