2017-03-19 9 views
0

私はいくつかの課題に取り組んでおり、基本的に私たちはファイルを分割することに取り組んでいます。これまでのところ、1つのメインファイルしか扱っていませんでした。C - プロトタイプのみを含むヘッダーファイル

したがって、main.c、function1.c、function2.c、header.hというヘッダファイルの3つのファイルがあります。

たちに与えられた命令によれば、ヘッダファイルがfunction1.cで符号化された実際の関数の関数プロトタイプを含むことがあり、function2.c

では、各ヘッダファイルを含むようにその後です。 cファイル。

main.cファイル内で、function1.cとfunction2.cでコーディングされた2つの関数が呼び出されます。しかし、私はエラーが表示されます、

main.c:(.text+0xec): undefined reference to `func1' 
main.c:(.text+0x110): undefined reference to `func2' 

私はこれがどうして起こっているのか分かりません。リンカは約2つの機能が見つからない文句を言うように私は、GCCコンパイラでこれを試してみてくださいLTS

+0

コンパイラコマンドに 'function1.c'と' function2.c'を含めましたか? – fredrik

+1

コンパイルにはどのコマンドを使用していますか? –

+0

最小限で完全で検証可能な例が必要です。あなたの課題に関するエラーとストーリーだけで、あなたの問題が本当に何であるかを推測することができます。 https://stackoverflow.com/help/mcve –

答えて

1

はこれが見えます。

関数プロトタイプを使用すると、関数の実装が最終的なプログラムで一緒にリンクするときに利用可能になることをコンパイラに伝える方法です。 GCCは、mainのコンパイル済みコードと、プログラムがまだ実行可能ないくつかの関数のアドレスを必要としているという情報を含むオブジェクトファイルを生成します。リンカ(gccが呼び出すプログラム)は、main.cのオブジェクトファイルを2つの関数のものにまとめ、メインプログラムのマシンコードの適切な場所にこれらのアドレスを挿入します。

次の2つの機能の実際の実装はリンク時にaviableなるよう

gcc -o main main.c function1.c function2.c 

を使用してプログラムをコンパイルする必要があります。

+0

働いた!私は他のファイルに「リンク」しなければならないことを理解していませんでした。私はgcc -o main main.cを使っていました。 – FShiwani

0

のUbuntu 16.04を実行している

gcc main.c function1.c function2.c 
関連する問題