我正在使用NDK为Android编写本机库(mylib.so)。 Mylib.so依赖于libssl.so。
Android NDK文档告诉我不应该使用system / lib中的libssl.so,因为它不是稳定API的一部分。相反,我应该自己交叉编译libssl并将其添加到NDK。
但是我看到mylib.so会自动链接到system / lib / libssl.so,因为dalvik vm(加载mylib.so)已经依赖于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?
由于
答案 0 :(得分:1)
答案 1 :(得分: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