2013-08-09 1 views
2

안드로이드에서 gnuradio 함수, 특히 밴드 패스 필터 함수에 액세스하려고합니다. 함수를 호출하지 않으면 ndk-build가 코드를 컴파일합니다. NDK 빌드에서안드로이드를 사용하는 C++에서 gnuradio에 대한 정의되지 않은 참조 NDK

오류 :이 특정 파일에 대한 내 Android.mk 파일에

error: undefined reference to 'gr_firdes::complex_band_pass(double, double, double, double, double, gr_firdes::win_type, double)' collect2: ld returned 1 exit status

나는 complex_band_pass (...) 함수를 호출 할 때, 그것은 나에게 정의되지 않은 참조의 오류를 제공합니다 :

#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가 기본으로 설치되어있는 내 rx_filter.cpp 파일에

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) 

위치

안드로이드에서 gnuradio 기능에 액세스하려면 어떻게해야합니까?

또 다른 질문은 Android NDK 환경에서 대역 통과 필터를 만드는 방법입니다.

미리 감사드립니다. 그동안 나는 지난 며칠 동안 내가 직접 문제를 해결할 것입니다. 솔루션을 찾으면 게시 할 것입니다.

답변

0

먼저 멤버 함수가

nm libgnuradio.a | grep gr_firdes::complex_band_pass 

또는 nm의 libgnuradio.a 이미 확인하실 수 있습니다 | 당신이 언급 한 바와 같이 다음

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를 통해 확인할 수 있습니다에 있어야 전체 빌드 로그를 디버깅 할 경우 그렙 complex_band_pass는

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

추가 ...에서 다른 대답들 중 하나는 (c++filt을 호출하면 함수 이름을 다듬을 수 있습니다. 예를 들어 : 귀하의 오류가 있는지 확인하여 LOCAL_LDLIBS을 해결해야

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

-lgnuradio-filter

을 포함
관련 문제