繁体   English   中英

使用 C++ 库的函数时失败

[英]Fail when I use a function of a c++ library

我正在做一个原生的 Android 应用程序,我有这个问题:

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

undefined reference to 'SDA_CorrelateLinear'

这是我的简单代码:

本地文件

#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);

}

安卓.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)

和应用程序.mk

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

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

谢谢

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

因此,要回答您的最后一个问题,不,您需要 SigLib 库的 Android 版本才能在 Android 中使用它。 显然,他们没有开箱即用的,但可以自己编译它(这可能不是一项微不足道的任务,但他们确实声称他们拥有“高度可移植的 ANSI C 源代码”)。

如果您设法为 Android 获取或创建 SigLib 库,您可能需要咨询此问题以了解如何将其包含在您的项目中。

首先,我很抱歉之前没有回复,但我没有意识到这里有任何 SigLib 问题。 我知道这已经很长时间了,但我不喜欢我应该回应却无人回答的话题。 我相信你现在已经继续前进了,但我认为回答你的问题没有坏处。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM