Android NDK共享库 [英] Android NDK shared libraries

查看:93
本文介绍了Android NDK共享库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为Android应用程序构建本机库.我有2个库,我需要将它们链接到我的最终库中,但是我有一些问题. Android.mk代码:

I am trying to build a native library for an Android application. I have 2 libraries and I need to link them in my final library, but I have some problems. The Android.mk code:

LOCAL_CFLAGS     := -Wall -Wfloat-equal -std=c99

LOCAL_PATH := $(call my-dir)/..

include $(CLEAR_VARS)
  LOCAL_MODULE            := cpu-lib
  LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/cpu/inc
  LOCAL_EXPORT_CPPFLAGS   := $(LOCAL_CFLAGS)
  LOCAL_EXPORT_LDLIBS     := -llog
  LOCAL_SRC_FILES         := $(LOCAL_PATH)/cpu/lib/$(TARGET_ARCH_ABI)/libdemoDSP.so
  LOCAL_STATIC_LIBRARIES  := gnustl_static
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
  LOCAL_MODULE            := dsp-lib
  LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/dsp/inc
  LOCAL_EXPORT_CPPFLAGS   := $(LOCAL_CFLAGS)
  LOCAL_EXPORT_LDLIBS     := -llog
  LOCAL_SRC_FILES         := $(LOCAL_PATH)/dsp/lib/$(TARGET_ARCH_ABI)/libfn_dsp.so
  LOCAL_STATIC_LIBRARIES  := gnustl_static
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := process
LOCAL_SRC_FILES := process.cpp
LOCAL_SHARED_LIBRARIES := cpu-lib dsp-lib
include $(BUILD_SHARED_LIBRARY)

问题是dlopen无法找到libfn_dsp.so. ndk依赖输出:

The problem is that the dlopen won't find the libfn_dsp.so. The ndk-depends output:

ndk-depends libs\arm64-v8a\libprocess.so
WARNING: Could not find library: ./obj/local/arm64-v8a/libfn_dsp.so
libprocess.so
liblog.so
libdemoDSP.so
libstdc++.so
libm.so
libdl.so
libc.so
./obj/local/arm64-v8a/libfn_dsp.so

该库似乎有些奇怪.有人知道会是什么吗?

It seems that is something strange with that lib. Does somebody know what might be?

推荐答案

问题是libfn_dsp.so miss SONAME info,您可以使用"readelf --dynamic libfn_dsp.so |grep SONAME",然后检查输出信息是否为空,并且可以使用"readelf --dynamic libdemoDSP.so |grep SONAME",这输出信息为"libdemoDSP.so".

The problem is libfn_dsp.so miss SONAME info, you can use "readelf --dynamic libfn_dsp.so |grep SONAME" then check output info is empty, And you can use "readelf --dynamic libdemoDSP.so |grep SONAME", which output info is "libdemoDSP.so".

如何解决: 1.如果您具有libfn_dsp.so源代码,则可以使用最新的NDK或使用较旧的NDK对其进行编译,并添加"-Wl,-soname,libfn_dsp.so"选项. 2.否则,在加载libprocess.so之前,先使用System.loadLibrary("fn_dsp")手动加载libfn_dsp.so.

how to fix: 1. If you have libfn_dsp.so source code, you can compile it with newest NDK, or with older NDK add "-Wl,-soname,libfn_dsp.so" option. 2. Otherwise, you use System.loadLibrary("fn_dsp") manually load libfn_dsp.so before loading libprocess.so.

这篇关于Android NDK共享库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆