45
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linker command failed with exit code 1でハマりまくったお話

Posted at

#Linker command failed with exit code 1

現在C++をベースにした openFrameworks というライブラリを用いて開発していますが、たまにこのエラーに遭遇します。
また、このエラー自体は swiftObjective-C を使った開発でも見かけたことがありますので、Xcodeのエラーだと思われます(ちなみに筆者のXcodeは 8.3.3 です)。

このエラーの辛いところ、それは”何がダメなのかよくわからないところ”です。

スクリーンショット 2017-09-10 15.09.30.png

というわけで、このエラーが出ると一気にやる気が失せてしまうわけですね。
エラー発生の理由がよくわからないので、何を修正したら良いのかもよくわからない。
どこの何行目がダメ、とか書かれていなくて、すごく困ったものです。

しかし、ようやくこのエラーとの向き合い方がわかった気がするので、今回備忘録として書いておくことにしました。

#発生原因は別のところで見れる
さすがに上のようなメッセージだけでは何を直せばいいの?となり、途方にくれましたので、エラーが出た過程を見れないものかと試してみました。

スクリーンショット 2017-09-10 15.14.15.png

Linker command の部分を右クリックで画像のようなポップアップ画面を出します。
そして、この中の Reveal in Logをクリックすると、下のようにエラー原因を見ることができます。

スクリーンショット 2017-09-10 15.19.27.png

筆者の場合、上記のようなメッセージと、duplicate symbol というメッセージを発見。
このとき、筆者のプログラムではcppファイルで別クラスをincludeし、そのまま変数をcppで定義していました。
これを複数のクラスで行なっていたため、このようなエラーが出たということがわかりました。
なので、これらをhファイルで宣言することでエラーを解消できました。
duplicateは訳すと「複写」という意味を持つらしく、定義が重複している時などに現れる模様です。
このように、Reveral in Logでエラーの詳細を見ればLinker commandの原因も特定しやすくなります。

ちなみに、hファイルで定義したメソッドをcppファイルで記述していない時などにもLinker commandのエラーが出ます。
このとき、ログで表示されたメッセージはreferenced fromでした。

#Linker commandで困ったら Reveal in Log を

まずはエラーの原因を特定するところから!ですね。
これができればエラー解消も楽になるのではないでしょうか。

45
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?