iOS向けにzlibの関数を使う静的ライブラリを作っていますが、
Unity 5.3を使っているユーザーからビルドに失敗するという報告を頂きました。
実はUnity 4の頃から、Unity側のiOSライブラリである libiPhone-lib.a
内にzlibの関数が定義されていたので、
zlibの関数を使うような静的ライブラリを追加しても、iOSのzlibを使うことなくリンクに成功していました。
そのため、zlibの関数が無くなったのかと思いましたが、シンボルにUnityのネームスペースが入ったため見失ったようです。
Unity 5.3未満
$ nm libiPhone-lib.a | grep deflate
libiPhone-lib.a(deflate.o):
000007ec T _deflate
000013d0 T _deflateBound
00001498 T _deflateCopy
000002fc T _deflateEnd
00000038 T _deflateInit2_
00000000 T _deflateInit_
00000718 T _deflateParams
000006d8 T _deflatePrime
00000440 T _deflateReset
00000584 T _deflateSetDictionary
000006ac T _deflateSetHeader
0000139c T _deflateTune
00005e17 S _deflate_copyright
00001844 t _deflate_fast
00001c9c t _deflate_slow
0000169c t _deflate_stored
U _deflate
U _deflateEnd
Unity 5.3
$ nm libiPhone-lib.a | grep deflate
libiPhone-lib.a(deflate.o):
0000181c t _deflate_fast
00001c6c t _deflate_slow
00001674 t _deflate_stored
000007d0 T _unity_z_deflate
000013a8 T _unity_z_deflateBound
00001470 T _unity_z_deflateCopy
000002f4 T _unity_z_deflateEnd
00000038 T _unity_z_deflateInit2_
00000000 T _unity_z_deflateInit_
00000708 T _unity_z_deflateParams
000006c8 T _unity_z_deflatePrime
00000430 T _unity_z_deflateReset
00000574 T _unity_z_deflateSetDictionary
0000069c T _unity_z_deflateSetHeader
00001374 T _unity_z_deflateTune
00003b60 S _unity_z_deflate_copyright
U _unity_z_deflate
U _unity_z_deflateEnd
U _unity_z_deflateInit2_
U _unity_z_deflateParams
U _unity_z_deflate
U _unity_z_deflateEnd
U _unity_z_deflateInit2_
解決策
素直にiOS標準のzlibにリンクしましょう。
iOSビルド時に自動的に追加するスクリプトを書くとビルドを自動化できて良いです。