1. ホーム
  2. c

[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?

2022-01-26 03:19:51

質問

Xcodeを使ってK&Rを少しずつ進めている初心者です。Functionsセクションで、彼らの例であるpower関数のコードを以下のように入力しました。

#include <stdio.h>

int power(int m, int n);

int main()
{
int i;

for (i=0; 1<10; ++i)
    printf("%d %d %d\n", i, power(2,i), power(-3,i));

return 0;
}

実行しようとすると、次のようなエラーが表示されます。

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

この質問に対する回答をたくさん読みましたが、このような小さなプログラムでは、私の状況にどのように適用されるのかがわかりません。
ご教示いただければ幸いです。

解決方法は?

なぜ clang: error: linker command failed with exit code 1 が表示されるのですか?

関数を宣言しただけです。コードには何も定義されていません。リンク時にコンパイラ(ここではclang)は {コード という関数が定義されているので、このような場合、リンカーはエラーを投げます。もし

プレ power

の宣言をリンクすることができます。 int power(int x, int y) { \*do calculation*/ } を定義しておけば、エラーになることはありません。

整数の場合は、関数を作ってみました。

プレ power

でコンパイルします。 #include <stdio.h> int power(int base, int exp); int main() { int i; for (i=0; i<10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } int power(int base, int exp) { int result = 1; while (exp) { if (exp & 1) result *= base; exp >>= 1; base *= base; } return result; }

関数を理解していただけたでしょうか?頑張ってください :-)