android - 链接Android NDK下的共享库

标签 android android-ndk

我成功地将库 LibXtract 编译为共享对象 libxtract.so 并且想在第二个项目中使用。

在提到的项目中,我尝试用简单的函数编译它:

#include <com_androidnative1_NativeClass.h>
#include <android/log.h>
#include "libxtract.h"

JNIEXPORT void JNICALL Java_com_androidnative1_NativeClass_showText
(JNIEnv *env, jclass clazz)
{

    float mean = 0, vector[] = {.1, .2, .3, .4, -.5, -.4, -.3, -.2, -.1}, spectrum[10];
    int n, N = 9;
    float argf[4];

    argf[0] = 8000.f;
    argf[1] = XTRACT_MAGNITUDE_SPECTRUM;
    argf[2] = 0.f;
    argf[3] = 0.f;

    xtract[XTRACT_MEAN]((void *)&vector, N, 0, (void *)&mean);
    __android_log_print(ANDROID_LOG_DEBUG, "LIbXtract", "Button pushe2");
}

我有平面结构:

  • jni/com_androidnative1_NativeClass.c
  • jni/com_androidnative1_NativeClass.hjni/libxtract.h
  • 来自 libxtract 接口(interface)的 jni/其他 *.h 文件
  • jni/安卓.mk
  • jni/应用程序.mk

库libxtract.so我放在mainproject/lib文件夹

我的 Android.mk 文件看起来像:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := com_androidnative1_NativeClass.c 
LOCAL_MODULE := com_androidnative1_NativeClass
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/
LOCAL_LDLIBS += -llog
LOCAL_SHARE_LIBRARIES := libxtract
NDK_MODULE_PATH += $(LOCAL_PATH)/../lib/
include $(BUILD_SHARED_LIBRARY)

我仍然有错误:

Compile thumb  : com_androidnative1_NativeClass <= com_androidnative1_NativeClass.c
SharedLibrary  : libcom_androidnative1_NativeClass.so./obj/local/armeabi/objs/com_androidnative1_NativeClass/com_androidnative1_Nativ    eClass.o: In function `Java_com_androidnative1_NativeClass_showText':
/home/jack/Projects/AndroidNative1/jni/com_androidnative1_NativeClass.c:20: undefined reference to `xtract'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libcom_androidnative1_NativeClass.so] Error 1

代码来自 LibXtract 示例,在 C++ 下编译没有问题,有什么想法吗?

最佳答案

你的 Android make 文件应该是......

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LIB_PATH := $(LOCAL_PATH)/../lib
LOCAL_SRC_FILES := com_androidnative1_NativeClass.c 
LOCAL_MODULE := com_androidnative1_NativeClass
LOCAL_LDLIBS += -llog

LOCAL_LDLIBS += $(LIB_PATH) -lxtract

LOCAL_SHARE_LIBRARIES := libxtract
include $(BUILD_SHARED_LIBRARY)

在您的第二个项目中尝试这个 make 文件,您可以成功构建您的代码而不会出现任何错误。

关于android - 链接Android NDK下的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874348/

相关文章:

android - 如何在 Android 中仅从 Realm 存储和检索单个行/值

android - 如何构建/编译 ndk 应用程序?

c# - 有没有办法修复错误 : 'Xamarin.Forms recommends TargetPlatformMinVersion >= 10.0.17763.0 (current project is -1)'

android-ndk - 无法在设备上调试 Android C++ 应用程序 (Visual Studio 2015)

c++ - Android NDK 应用构建但不运行

android - 为 android 4.2 构建屏幕记录

android - 在 Release模式下崩溃,但如果可调试为真 - 不是......可能的问题是什么?

android - animation.start() 或 animation.startNow() 不会立即启动动画

android - 如何在edittext android中插入jpeg文件

android - 如何使用房间从 recyclerview 中删除一行?