От новичка до гуру: Курсы программирования на CyberDuff

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

Я пытаюсь получить доступ к функциям gnuradio в Android, в частности к функции полосового фильтра. Без вызова каких-либо функций ndk-build компилирует код. Когда я вызываю функцию complex_band_pass(...), она выдает ошибку неопределенной ссылки на:

Ошибка от ndk-сборки:

ошибка: неопределенная ссылка на '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 был установлен в папку по умолчанию.

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

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

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

09.08.2013

Ответы:


1

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

nm libgnuradio.a | grep gr_firdes::complex_band_pass

или нм 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
08.01.2015

2

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

06.07.2015
Новые материалы

5 простых концепций Python, ставших сложными
#заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

«Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

Игра в прятки с данными
Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

«Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..