83421


※Xcodeをインストールしています。

VSCodeのターミナルから `gcc -o main main.c` でコンパイルしようとしましたが以下のエラーが出ました。

[code]

    Undefined symbols for architecture x86_64:
      "_avg", referenced from:
      _main in main-d23be1.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
[/code]

use -v と書いてあるので `gcc -v main main.c` としたところ、以下のようになりました。エラーの解決方法を教えてください。

[code]

    Apple clang version 13.0.0 (clang-1300.0.29.3)
    Target: x86_64-apple-darwin20.6.0
    Thread model: posix
    InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
    clang: error: no such file or directory: 'main'
    
[/code]

### ソースコード

main.c

[code]

    #include <stdio.h>
    #include "calc.h"
    
    int main(){
      double d1,d2,d3;
      double a = 1.2,b = 3.4,c = 2.7;
      //   同じ計算が3回(関数を呼び出して計算）
      d1 = avg(a,b);
      d2 = avg(4.1,5.7);
      d3 = avg(c,2.8);
      printf("d1 = %f,d2 = %f,d3 = %f¥n",d1,d2,d3);
    }
    
[/code]

calc.h

[code]

    #ifndef _CALC_H_
    #define _CALC_H_
    
    //  関数avgのプロトタイプ宣言
    double avg(double,double);
    
    #endif // _CALC_H_
    
[/code]

calc.c

[code]

    #include "calc.h"
    
    //  平均値を求める関数
    double avg(double l,double m){
        //  引数l,mの平均値を求め、rに代入する。
        double r = (l + m) / 2.0;
        return r;
    }
    
[/code]


CC BY-SA 4.0
2021-11-04T06:13:37.247
83420
2021-11-04T07:28:04.907
2021-11-04T07:28:04.907
3060
48943
question
c
gccでC言語のコンパイルができない


`gcc -o main main.c calc.c` のように、`calc.c` もコマンドラインに指定してください。関数 `avg()` が
`calc.c` の中にあるからです。


CC BY-SA 4.0
2021-11-04T06:28:56.583
83421
2021-11-04T06:28:56.583
3475
83420
answer


分割コンパイルの解説は検索すればすぐ見つかると思うのだけど、一番簡単で遅いコンパイル・リンク手順は

[code]

    gcc -o main main.c calc.c
    
[/code]

なぜこうしないといけないかは、やはり検索してみて、それでもわからなければ別質問にしてくれると幸い。

他の方法だと `Makefile` を作って `make` するってことになるんだけど、全部解説すると分量が多いっス。


CC BY-SA 4.0
2021-11-04T06:29:31.917
83422
2021-11-04T06:29:31.917
8589
83420
answer