duplicate symbol in libNendAd.a


リンクエラー発生

なかなか時間が取れない中で細々とiOSアプリの開発を続けています。
そんな中でcocos2d-xで開発中のアプリに広告を入れようとしたときに遭遇した問題。

環境:
cocos2d-x 3.7.1
NendSDK 2.7.4
xcode 6.2

アプリがある程度形になってきたところで、広告を入れてみようとhttps://github.com/fan-ADNのcocos2d-xのマニュアルを読みながら設定、ビルド。
すると

duplicate symbol _llvm.cmdline in:
 /ファイルパス/proj.ios_mac/ios/NendAd/libNendAd.a(NADInterstitial.o)
 /ファイルパス/proj.ios_mac/ios/NendAd/libNendAd.a(NADInformationView.o)
duplicate symbol _llvm.embedded.module in:
 /ファイルパス/proj.ios_mac/ios/NendAd/libNendAd.a(NADInterstitial.o)
 /ファイルパス/proj.ios_mac/ios/NendAd/libNendAd.a(NADInformationView.o)

このようなduplicate symbolエラーが大量に発生してビルドできません。

Xcodeが古かった

早速google先生に聞いてみると、Nendとは関係ないですが同じようなエラーで悩んでいる方々がいました。
Duplicate Symbols with ParseCrashReporting 1.8.3/4
xcode – Linker Error in iOS (duplicate symbols for architecture x86_64) – Stack Overflow
ios – duplicate symbols for architecture x86_64 (Implementing FBSDKCoreKilt) Swift – Stack Overflow

端的に言うとxcodeのバージョンを上げろということなのかな。
xcode7にするとエラーが再現しなくなったり、xcodeはそのままでライブラリの方を古いやつに変えるとエラーが出なかったりするようなので、xcode7で作成したライブラリをxcode6でリンクしようとするとエラーになっているように見える。

Nendの古いライブラリは提供されていないようですし、うまく動いているものを変更するのが怖いのでこれまでアップデートせずに来てしまいましたが、仕方なくxcodeをアップデートすることにします。

しかしここでさらに問題が発生。
私の使っているOS X Mavericks 10.9.5ではxcode7にアップデートできなかったのです。。。
OSまでもアップデートしなくてはならないとは!
なんかレビュー見ると、古いメールが全部消えたとか、動作が遅くなったとかいろいろと言われているようでかなりためらっていたのですが、こうなったら仕方がないです。

まずはOSのアップデート

とうとうOS X El Capitanへ。Yosemiteを飛ばしてしまったようですが。
OS X El Capitanにアップデートして、inkscapeが起動しなくなって困ったりしましたが、
YosemiteでInkscapeが起動してくれなかった件についてまとめ | アカネメモランダム
このあたりの先人のお知恵をお借りして無事バージョンアップし、日本語でも起動できるようになりました。
メールが消えるようなことはなかったし、動作は前よりもずっと軽くなった印象でかなり快適になりました。

Xcode7.1でビルド成功

そしてかなり時間がかかってしまいましたが引き続きxcode7.1へアップデートします。
無事アップデートし Clean → Build してみると、見事ビルド成功しました。
よかった!

実はビルドは成功したもののなぜか広告が表示できなくてまだ四苦八苦してますけど、この辺はまぁいずれ解決できるでしょう。

追記

よくよくマニュアルを読んでみたら公式も認識している問題だったようです(一番最後に書かれていました)。
テスト表示を行う · fan-ADN/nendSDK-iOS Wiki · GitHub

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です