duplicate symbol in libNendAd.a
- 2015年11月04日
- iOSアプリ開発
リンクエラー発生
なかなか時間が取れない中で細々と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