『gcc 5分シリーズ』第4節:-cオプション(マルチファイルプログラミング)
「gcc 5分シリーズ」第4節:-cオプション(マルチファイルプログラミング)IDE党がC/C++プロジェクトを書くと、必ず1つのプロジェクトに複数のファイルがあると信じています.では、gccは複数のファイルを処理できるかどうか.答えはできますが、いくつか注意すべき点があります.2つのファイル、sum.cppファイルはsum関数を定義しています.コードは以下の通りです.
main.cppはsum関数を呼び出し、結果を出力します.コードは次のとおりです.
どうやってコンパイルしますか?エラーメソッド:
このようにコンパイルすると、エラーが発生します.
明らかに、3行目から(ld)が見えます.リンク時のエラーです.このエラーの原因も簡単です.main.cppにはsum関数の定義がないので、リンク(ld)は恨みを晴らし、sum関数の定義が見つかりません.C/C++はターゲットファイルに依存していることを知っておくべきです(拡張子.oというファイル)マルチファイルプログラミングを実現します.まず、コンパイラはソースファイルをターゲットファイルにコンパイルします.次に、リンクは複数のターゲットファイルを実行可能ファイルにリンクします.では、gccではどうすればいいですか.次の3行のコマンドが必要です.
ここで,-cは「コンパイルのみでリンクしない」という意味である.
その後、運転できます.コマンド:
出力:
本節が終わる.
- int sum(int a,int b)
- {
- return a+b;
- }
main.cppはsum関数を呼び出し、結果を出力します.コードは次のとおりです.
- #include <iostream>
- using namespace std;
- int sum(int a,int b);
- int main(){
- cout<<sum(4,7)<<endl;
- return 0;
- }
どうやってコンパイルしますか?エラーメソッド:
- g++ -o main main.cpp
このようにコンパイルすると、エラーが発生します.
- /tmp/xxxx.o: In function `main':
- main.cpp:(.text+0xf): undefined reference to `sum(int, int)'
- collect2: ld returned 1 exit status
明らかに、3行目から(ld)が見えます.リンク時のエラーです.このエラーの原因も簡単です.main.cppにはsum関数の定義がないので、リンク(ld)は恨みを晴らし、sum関数の定義が見つかりません.C/C++はターゲットファイルに依存していることを知っておくべきです(拡張子.oというファイル)マルチファイルプログラミングを実現します.まず、コンパイラはソースファイルをターゲットファイルにコンパイルします.次に、リンクは複数のターゲットファイルを実行可能ファイルにリンクします.では、gccではどうすればいいですか.次の3行のコマンドが必要です.
- g++ -c -o main.o main.cpp
- g++ -c -o sum.o sum.cpp
- g++ -o main main.o sum.o
ここで,-cは「コンパイルのみでリンクしない」という意味である.
その後、運転できます.コマンド:
- ./main
出力:
- 11
本節が終わる.