2

我正在尝试访问 Android 中的 gnuradio 功能,特别是带通滤波器功能。ndk-build 在不调用任何函数的情况下编译代码。当我调用 complex_band_pass(...) 函数时,它给了我一个未定义引用的错误:

来自 ndk-build 的错误:

错误:未定义对 'gr_firdes::complex_band_pass(double, double, double, double, double, gr_firdes::win_type, double)' 的引用 collect2: ld 返回 1 个退出状态

在这个特定文件的我的 Android.mk 文件中:

include $(CLEAR_VARS)
LOCAL_MODULE    := rxfilter
LOCAL_SRC_FILES := src/rx_filter.cpp
LOCAL_C_INCLUDES += /usr/local/include/gnuradio \
                /usr/local/include \
                ${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/stlport
LOCAL_CFLAGS := -DANDROID -DUSE_LIBLOG
LOCAL_SHARED_LIBRARIES +=  rtlsdr
LOCAL_STATIC_LIBRARIES :=  /usr/local/lib/libgnuradio #doesn't seem to help
LOCAL_LDLIBS +=  -llog
include $(BUILD_SHARED_LIBRARY)

在我的 rx_filter.cpp 文件中:

#include <jni.h>
#include <cmath>
#include <math.h>
#include <vector>

#include <gr_firdes.h>

using namespace std;

static void attemptToAccessGnuRadio()
{
    // gr_firdes is a class
    gr_firdes gg;
    // compiles without this line
    gg.complex_band_pass(1.0, 24000.0, 100.0, 500.0, 1.0); 
}

#ifdef __cplusplus
extern "C" {
#endif


JNIEXPORT jint JNICALL Java_rtlsdr_MainActivity_nativeRtlSdrFm(JNIEnv *envp, jobject objp)
{    
    return 1;
}

#ifdef __cplusplus
}
#endif

注意:gnuradio 已经安装在默认位置

我该怎么做才能访问 android 中的 gnuradio 功能?

另一个问题是如何在 Android NDK 环境中创建带通滤波器?

在此先感谢您,与此同时,我将像过去几天一样自己进行故障排除。如果我找到解决方案,我会发布它。

4

2 回答 2

0

首先你可以检查成员函数是否已经在

nm libgnuradio.a | grep gr_firdes::complex_band_pass

或 nm libgnuradio.a | grep complex_band_pass

添加

LOCAL_LDFLAGS := -L/usr/local/lib
LOCAL_LDLIBS +=  -llog -lgnuradio

如果您调试完整的构建日志,那么

build V=1 will be helpful or use VERBOSE=1
于 2015-01-08T15:20:12.070 回答
0

gr_firdes::complex_band_pass(double, double, double, double, double, gr_firdes::win_type, double)应该在libgnuradio-filter.a

您可以通过nm其他答案之一中提到的方式进行验证(调用c++filt可以帮助解开函数名称。例如: $ nm libgnuradio-filter.a | c++filt | grep complex_band 000024c8 T gr::filter::firdes::complex_band_pass(double, double, double, double, double, gr::filter::firdes::win_type, double)

您的错误应该通过确保您的LOCAL_LDLIBS包含来解决-lgnuradio-filter

于 2015-07-06T18:44:19.153 回答