2011-01-21 9 views
0

:私はメインコンパイルしようとadd.hmain.cppC++ - ここでは一例に続いて/tmp/cckpbRW.o:main.cc:(.text+0x9d):undefined参照

に関連http://www.learncpp.com/cpp-tutorial/19-header-files/

.cc(別の拡張機能を使用したばかりです)、次のようになります。

/tmp/cckpbRW.o:main.cc:(.text+0x9d):undefined reference to 'add(int, int)' collect2: ld returned 1 exit status 

この問題を解決するにはどうすればよいですか?

ありがとうございました。

答えて

3

mainオブジェクトをaddにリンクしていないため、リンカが実行可能ファイルをビルドしようとするとシンボルadd(int, int)の定義が見つかりません。

あなたはmainオブジェクト、addオブジェクトをコンパイルし、このように、それらを一緒にリンクする必要があります。

g++ -c -o main.o main.cpp 
g++ -c -o add.o add.cpp 
g++ -o executable main.o add.o 

または

g++ -o executable main.cpp add.cpp 

これはadd.cppと一緒にmain.cppに

+0

:コンパイルと同時に、それらをリンクし、次のいずれか

$ c++ -Wall -Werror -pedantic -g -otest1 add.cpp main.cpp 

またはそれらを別々にコンパイルし、リンク。それは今働いた。それで、一緒にコンパイルする "キー"はありますか?私たちがやっていることは、2つのオブジェクトをコンパイルしながら、なぜあなたは "それらを一緒にリンク"するのですか?ありがとう。 – Simplicity

+0

@pero。ソリューションの最初のフォームを使用すると、同じエラーが発生します。私は例えば--- --- g ++ main.cc -o main.o(私はCygwinを使用しています)とタイプしました。エラーが表示されるのはなぜですか?ありがとう。 – Simplicity

+0

@SWEngineer:リンクするのではなく、コンパイル(および/またはアセンブル)するようコンパイラーに指示するには、-cを使用する必要があります。 プログラムのコンパイルはいくつかの段階から成ります。最後のものはリンクしています。実際には実行可能ファイルをビルドして、ソースファイルにすべてのものを入れています。 – peoro

1

をコンパイルします。 2番目の.cppファイルを最終実行ファイルにリンクしていないようです。お返事をありがとう

$ c++ -Wall -Werror -pedantic -g -c main.cpp 
$ c++ -Wall -Werror -pedantic -g -c add.cpp 
$ c++ -Wall -Werror -pedantic -g -otest1 add.o main.o 
関連する問題