現在 iOS で動作する C および C++ ライブラリを移植して、Android アプリケーションで使用します。私はこれらの最後の 3 つのリンカ エラー (プライバシー上の理由から難読化されています) にダウンしています:
/Users/fer662/projects/xxx/jni/xxx_preprocessing.c:10184: エラー: 'cexp' への未定義の参照 /Users/fer662/projects/xxx/jni/xxx_preprocessing.c:10184: エラー: 'cpowf' への未定義の参照/Users/fer662/projects/xxx/jni/xxx_preprocessing.c:10285: エラー: 'cabs' への未定義の参照
これで、これらは通常 libm.so (-lm) とのリンクから発生することを理解しましたが、すでにそれを行っています。私が行って問題を確認すると、nmで次のようになります。
nm -g /Users/fer662/Library/Android/sdk/ndk-bundle/platforms/android-22/arch-x86/usr/lib/libm.so | grep cpow
何も戻ってこない。私がAPI 28を使用する場合、それはそうです
nm -g /Users/fer662/Library/Android/sdk/ndk-bundle/platforms/android-28/arch-x86/usr/lib/libm.so | grep cpow
00003900 T cpow
00003910 T cpowf
00003920 T cpowl
また、静的ライブラリでは、API 22 でも表示されます。
nm -g /Users/fer662/Library/Android/sdk/ndk-bundle/platforms/android-22/arch-x86/usr/lib/libm.a | grep cpow
s_cpow.o:
00000000 T cpow
s_cpowf.o:
00000000 T cpowf
s_cpowl.o:
00000000 T cpowl
その矛盾は不可解です。サポートされていない場合、ヘッダーから完全に欠落していませんか? 静的ライブラリにはそれがあり、dylib にはないのはなぜですか?
それに対して静的にリンクすることは理にかなっていますか? もしそうなら、現在のAPIバージョンの正しいパスを考慮して、どうすればよいですか?
私の他のオプションは、libmの実装(http://openlibm.org/など)または私が使用しているこれらの3つの機能だけを盗むようです。