Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我使用C++库函数时失败_Android_Android Ndk - Fatal编程技术网

Android 当我使用C++库函数时失败

Android 当我使用C++库函数时失败,android,android-ndk,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>

我正在做一个本地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);

}
和Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi
APP_PLATFORM := android-8
我怎样才能解决这个问题?如果这个库没有像OpenCV这样的Android版本,是否可能


谢谢

显然,您包含了来自SigLib的头文件,但您没有链接到它

所以要回答你的最后一个问题,不,你需要一个Android版本的SigLib库才能在Android中使用它。很明显,他们没有现成的,但是可以自己编译。这可能不是一个简单的任务,但是他们有高度可移植的ANSI C源代码


如果您设法获得或创建了Android的SigLib库,您可能想咨询一下如何将其包括在您的项目中。

首先,我很抱歉之前没有回复,但我不知道这里有任何SigLib问题。 我知道这已经有很长一段时间了,但我不喜欢我应该回应的帖子被置之不理。 我肯定你现在已经离开了,但我觉得回答你的问题没有坏处

SigLib已经在许多重要的Android应用程序中使用,所以我知道它在这种情况下是健壮的。SigLib的免费版本包括一个Android版本。 正如PaF所提到的,除了包含头文件之外,还需要链接库文件。 这里提供了一个简单的示例来说明如何做到这一点

如果您需要任何进一步的帮助,请随时通过Numerix DSP网站与我联系。 顺致敬意,
John

在Siglib的文件夹中有两个文件:Siglib.a和Siglib.so。我能用这个文件吗??如果是,我的Android.mk如何?感谢您的关注,他们似乎并没有为安卓系统打造这款手机。您可能正在寻找只在PC Linux上工作的库。是的。。我是编程新手,我不知道如何在Android上建立这个库,有什么帮助吗?然后,当我编译这个库时,我想我只需要按照你提出的问题的步骤来操作。这是我加载的.zip为Android构建这个库与你已经开始做的没有太大区别。你的设置实际上只是从一个名为nativo.cpp的源文件构建了一个名为native_code的库。实际上,您可以将所有SigLib源文件直接添加到您的Android.mk文件中,这样它们就包含在您的原生代码库中。另一种方法是创建一个单独的文件夹,其中包含一个单独的Android.mk文件,并将所有的SigLib源代码放在那里,然后参考我链接到的问题。不过我建议你检查一下他们的许可证,以确保你可以这样做。
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi
APP_PLATFORM := android-8