неопределенная ссылка на gnuradio в C ++ с использованием Android NDK

Я пытаюсь получить доступ к функциям gnuradio в Android, в частности к функции полосового фильтра. Без вызова каких-либо функций, 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" {
#endifJNIEXPORT jint JNICALL Java_rtlsdr_MainActivity_nativeRtlSdrFm(JNIEnv *envp, jobject objp)
{
return 1;
}

#ifdef __cplusplus
}
#endif

Примечание: gnuradio был установлен в папку по умолчанию

Что я могу сделать, чтобы получить доступ к функциям gnuradio в Android?

Альтернативный вопрос: как создать полосовой фильтр в среде Android NDK?

Заранее спасибо, тем временем я буду устранять неисправности самостоятельно, как и в течение последних нескольких дней. Если я найду решение, я опубликую его.

2

Решение

Сначала вы можете проверить, что функция-член уже

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
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

0

По вопросам рекламы [email protected]