我使用c ++库的函数时失败

时间:2013-12-31 16:26:37

标签: android android-ndk

我正在使用原生Android应用程序,我遇到了这个问题:

在我的原生代码中,我想使用Siglib(一个DSP库),但是当我使用这个库的一个函数并尝试运行该应用程序时,出现此错误:

undefined reference to 'SDA_CorrelateLinear'

这是我的简单代码:

nativo.cpp

#include "nativo.h"
#include "Parameters.h"
#include <siglib.h>

#include <android/log.h>


using namespace std;

#define LOG_TAG "NATIVO"
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))

JNIEXPORT jlong JNICALL Java_com_sistoleaudiocapture_Processing_init_1variables(
        JNIEnv *, jclass) {

    long dir = (long) new Parameters();

    return (dir);
}

JNIEXPORT jdouble JNICALL Java_com_sistoleaudiocapture_Processing_prueba_1nativa(
        JNIEnv *, jclass, jlong retorno) {

#define INPUT_1_LENGTH          5L
#define INPUT_2_LENGTH          5L

    SLData_t pSrc1[] = { 0.05, 0.1, 0.15, 0.2, 0.25 };

    SLData_t pSrc2[] = { 1.0, 1.0, 1.0, 1.0, 1.0 };

#define RESULT_LENGTH           ((SLArrayIndex_t)(INPUT_1_LENGTH + INPUT_2_LENGTH - 1))

    SLData_t dest[RESULT_LENGTH ];

    SDA_CorrelateLinear(pSrc1,pSrc2,dest,5,5,9);

    //SDA_CorrelateLinear(pSrc1, pSrc2, dest, INPUT_1_LENGTH, INPUT_2_LENGTH,
        //  RESULT_LENGTH );

    double m1;
    int pos_m = 0;
    double aux = 0, mayor = 0;

    for (int i = 0; i < 9; i++) {
        aux = dest[i];
        if (aux > mayor) {
            mayor = aux;
            pos_m = i;
        }
    }
    return (mayor);

}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)



LOCAL_SRC_FILES  := nativo.cpp Parameters.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH) C:\Users\telo\Downloads\SigLibFree\siglib\include
LOCAL_LDLIBS     += -llog -ldl 

LOCAL_MODULE     := native_code

include $(BUILD_SHARED_LIBRARY)

和Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi
APP_PLATFORM := android-8

我该怎样做才能解决这个问题?如果这个库没有像OpenCV这样的Android版本,可能吗?

由于

2 个答案:

答案 0 :(得分:0)

显然,您要包含SigLib的头文件,但您没有链接它。

所以回答你的上一个问题,不,你需要Android版SigLib的库才能在Android中使用它。显然,他们没有一个开箱即用,但它可能是自己编译的(它可能不是一个微不足道的任务,但they do claim他们有&#34;高度便携ANSI C Source&#34;)。

如果您设法获取或创建适用于Android的SigLib库,您可能需要咨询this question以了解如何将其包含在项目中。

答案 1 :(得分:0)

首先,我很抱歉在此之前没有回复,但是我没有意识到这里有任何SigLib问题。 我知道已经有很长时间了,但是我不喜欢那些我应该回应的线程,如果没有得到答复。 我敢肯定您现在已经前进了,但是我认为回答您的问题没有害处。

SigLib已在许多重要的Android应用程序中使用,因此我知道在这种情况下它很健壮。 SigLib的免费版本包括一个Android版。 如PaF所述,除了包括头文件之外,您还需要链接库文件。 提供了一个简单的示例,说明了如何执行此操作。

如果您需要进一步的帮助,请随时通过Numerix-DSP网站与我联系。 最好的祝福, 约翰