※本記事は、旧ブログからの再掲です。
Xcodeでビルド実行時に下記エラーが発生しました。
“duplicate symbol XXXXX in:
/Users/mal000n/Library/Developer/Xcode/DerivedData/…../XXX.o
ld: 2 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)”
エラーが発生したのは実装ファイル上部の文字列定義をしている箇所で、下記のように定義していました。
複数の実装ファイルで同じ変数を定義していました。
(定義している文字列はファイル毎に違うものを設定しています)
NSString *MOJIRETSU_TEIGI = @”mojiretsu”;
調べてみると、定義時にstatic指定子を付けていなかったことが原因でした。
下記のように修正したら、無事エラーは解消しました。
static NSString *MOJIRETSU_TEIGI = @”mojiretsu”;
「詳解 Objective-C 2.0 第3版」 (荻原 剛志 著)によると、
Objective-C(C言語)では、
実装ファイル内でstatic指定子を使って変数を宣言すれば、その変数は実装ファイル内だけで参照できるようになるが、何の指定もしないと関数の外部で宣言された変数は、他のクラスからも参照できてしまうとのことです。