2

現在 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つの機能だけを盗むようです。

4

1 に答える 1