【cocos2dx】Nend広告のSDKを入れたらプロジェクトがおかしくなった。【解決しました】

アドネットワークのNendさんが、ついにアイコン広告をはじめるとのことで、何か素敵なキャンペーンがあるみたいです。 そこで、新しいアプリで早速このアイコン広告を導入することにしました。 ですが、Nendのフォルダをプロジェクトに追加したら、おかしなエラーが出て解消できなくなりました。

追記

11/12に解決致しました。 詳しくは、下記で説明しています。 大変ご迷惑をお掛けしました。

エラーの内容

Nendのフォルダをプロジェクトに加えたところ、変なエラーが出てどうにもいかなくなりました。 もし、同じようなエラーの場合は下記方法で解消してください。

Library not found for -lcurl

Library not found for -lcurl Linker command failed with exit code 1

2013-11-12-ffdsds

これは、最初にプロジェクトを作成した時から気になっていたのですが、cocos2dxに最初からあるフレームワークで一つだけ赤字のものがありました。 それが、[libcurl.a]です。

Library not found for -lcurl

これまで、何もエラーが出ていなかったのでほっておいたのですが、ここでリンクエラーが出ました。 解消方法は、これを削除することです。

これで「Library not found for -lcurl」のエラーが無くなります。

library not found for -lwebsockets

上記のエラーを解消すると、今度は同じようなエラーが出てきます。 今度は、[libwebsockets.a]にリンクができていないという内容です。

しかし、プロジェクトの[Target]にある「Linked Framework and Libraries」を見ると、[libwebsockets.a]をあります。

2013-11-12-ddsa

色々悩んだのですが、こちらのサイトを参考にしました。

cocos2dxのプロジェクトにある、[libwebsockets.a]へのSeachPathsが上手くいっていなかったことが、おそらくこのエラーの原因です。

2013-11-12-ffds

上記画像にある「Library Search Paths」に、[libwebsockets.a]へのパスを設定してあげれば、エラーが消えました。

[c] /cocos2dxフォルダ名/external/libwebsockets/ios/lib [/c]

フォルダを移動させると別のエラーが出る

プロジェクトフォルダを動かさなければ、これ以上エラーは発生せず、Nend広告も表示できるようになります。 ただ、プロジェクトフォルダを別の場所に移動すると、また「Library not found for」のエラーが出ます。 今度は「Library not found for lNendAd」です。

雑感

このように、ライブラリーのエラーが続き、どうにもならなくなりました。 フォルダを動かさなければ良いと思うのですが、それでは根本的な解決になっていません。

cocos2dxのバージョンは2.2と2.13を試したのですが、どちらでも同じようになりました。 もし、よい解決方法があれば教えてください。 おそらく、リンクの問題だと思うのですが、ネットにも情報が載っていなかったのでお手上げ状態です。

追記 解決編

Nend(ファンコミュニケーションズ)さんに問い合わせをして無事解決できました。 解決方法を順に説明します。

Library not found for -lcurl

これに関しては、一度削除をして、改めて「-libcurl.a」を追加して、パスを設定しました。 このファイルは[cocos2dx]->[platform]=>[third_party]->[ios]->[libraries] の中にあります。 これを、プロジェクトのフレームワークの部分に追加をして、[Library Search Paths]でファイルパスを設定します。 [c]

"$(SRCROOT)/../../../cocos2dx/platform/third_party/ios/libraries/libcurl.a"

[/c]

library not found for -lwebsockets

パスを正しく設定しても、このエラーが出てきました。 これは、[Library Search Paths]がおかしいためにリンクが確認できないエラーです。 先ほどと同じように、[Library Search Paths]からファイルパスを設定します。 [c]

"$(SRCROOT)/../../../external/libwebsockets/ios/lib"

[/c]

フォルダを移動させると別のエラーが出る

これも同様に[Library Search Paths]を修正する必要があります。 おそらくNendAdフォルダに関してのエラーだと思います。NendAdフォルダを置いているパスを設定して下さい。 [c]

"$(SRCROOT)/../../../projects/"プロジェクト名"/proj.ios/NendAd

[/c]

これで、フォルダを別の場所に移動してもビルドできるようになりました。

追記 最後に

cocos2dxのプロジェクトを作成した時点で、ライブラリーのパスがおかしいためこのようなエラーが出ていました。 [create_project.py]を使ったプロジェクトの作成には注意が必要です。

詳しくはこちらcocos2d-xにおけるマルチプラットフォーム開発環境構築ツール | チラ裏開発メモ

まだアイコン広告は表示させていないのですが、おそらく大丈夫でしょう。 こちらに関しては、また別途ブログに書きたいと思います。