Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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 を

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

aframeworks-blog
2017年度同志社ローム記念館プロジェクト アトリエフレームワークスです。私たちはインタラクティブアートをより身近に感じてもらえるよう、作品制作、制作過程の公開、作品公開の3つを柱に活動している学生団体です! openFrameworks, Arduino等を用いて「触って遊べるデジタルアート」をテーマに作品を制作しています。
http://afworks.kyotanabe.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした