2

NDK を使用して、Android 用のネイティブ ライブラリ (mylib.so) を作成しています。mylib.so は libssl.so に依存しています。

Android NDK のドキュメントには、安定した API の一部ではないため、system/lib の libssl.so を使用すべきではないと書かれています。代わりに、libssl を自分でクロスコンパイルして、NDK に追加する必要があります。

しかし、mylib.so が system/lib/libssl.so に自動的にリンクされることがわかります。これは、(mylib.so をロードしている) dalvik vm が既に libssl.so に依存しているためです。

$ readelf -d /system/bin/dalvikvm | grep Shared
 0x00000001 (NEEDED)                     Shared library: [libdvm.so]
 0x00000001 (NEEDED)                     Shared library: [libssl.so]
 0x00000001 (NEEDED)                     Shared library: [libz.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.s
 0x00000001 (NEEDED)                     Shared library: [libm.so]

では、これに対処する正しい方法は何ですか?とにかく system/lib/libssl.so を使用しますか?

ありがとう

4

2 に答える 2

1

次のサイトからダウンロードできます: http://www.mediafire.com/download/njyqyxu3nxm/tcpdump.zip

于 2013-08-13T11:12:53.117 に答える
0

Android.mk ファイルに問題があるようです。目的のバージョンの libssl を .so ファイルにクロスコンパイルしたと仮定すると、次のような新しいモジュールを Android.mk ファイルに作成する必要があります。

include $(CLEAR_VARS)
LOCAL_MODULE := libssl-prebuilt
LOCAL_SRC_FILES := libssl.so
LOCAL_EXPORT_C_INCLUDES := /path/to/the/include/files/for/libssl.so
include $(PREBUILT_SHARED_LIBRARY)

上記のモジュールは、ローカルのビルド済みバージョンの libssl.so をネイティブ プロジェクトに追加します。mylib.so をコンパイルするときに、libssl.so のローカル バージョンにリンクする場合は、次のエントリを mylib モジュールに追加する必要があります。

LOCAL_SHARED_LIBRARIES := libssl-prebuilt 
于 2013-03-21T18:32:47.200 に答える