#Linker command failed with exit code 1
現在C++をベースにした openFrameworks
というライブラリを用いて開発していますが、たまにこのエラーに遭遇します。
また、このエラー自体は swift
や Objective-C
を使った開発でも見かけたことがありますので、Xcodeのエラーだと思われます(ちなみに筆者のXcodeは 8.3.3
です)。
このエラーの辛いところ、それは”何がダメなのかよくわからないところ”です。
というわけで、このエラーが出ると一気にやる気が失せてしまうわけですね。
エラー発生の理由がよくわからないので、何を修正したら良いのかもよくわからない。
どこの何行目がダメ、とか書かれていなくて、すごく困ったものです。
しかし、ようやくこのエラーとの向き合い方がわかった気がするので、今回備忘録として書いておくことにしました。
#発生原因は別のところで見れる
さすがに上のようなメッセージだけでは何を直せばいいの?となり、途方にくれましたので、エラーが出た過程を見れないものかと試してみました。
Linker command
の部分を右クリックで画像のようなポップアップ画面を出します。
そして、この中の Reveal in Log
をクリックすると、下のようにエラー原因を見ることができます。
筆者の場合、上記のようなメッセージと、duplicate symbol
というメッセージを発見。
このとき、筆者のプログラムではcppファイルで別クラスをincludeし、そのまま変数をcppで定義していました。
これを複数のクラスで行なっていたため、このようなエラーが出たということがわかりました。
なので、これらをhファイルで宣言することでエラーを解消できました。
duplicate
は訳すと「複写」という意味を持つらしく、定義が重複している時などに現れる模様です。
このように、Reveral in Log
でエラーの詳細を見ればLinker command
の原因も特定しやすくなります。
ちなみに、hファイルで定義したメソッドをcppファイルで記述していない時などにもLinker command
のエラーが出ます。
このとき、ログで表示されたメッセージはreferenced from
でした。
#Linker commandで困ったら Reveal in Log を
まずはエラーの原因を特定するところから!ですね。
これができればエラー解消も楽になるのではないでしょうか。