使用JNI,我想爲Android NDK編寫一個本地C++方法,它調用定製頭文件中定義的C函數。但是,我正在爲C函數調用收到未定義的引用錯誤。Android NDK/JNI - 未定義的自定義頭文件中定義的函數引用
這裏是我的C++代碼,可以調用C函數和它的結果返回給Java作爲一個的jstring:
#include <jni.h>
#include "gesture_detector.h"
JNIEXPORT jstring JNICALL Java_com_example_bmtitest_JavaAbstractionLayer_callGestureAnalysis(JNIEnv *env, jobject obj, jfloat previousX, jfloat previousY, jfloat currentX, jfloat currentY) {
return env->NewStringUTF(gestureAnalysis(previousX, previousY, currentX, currentY));
}
這裏是我的C函數:
#include <stdio.h>
#include "gesture_detector.h"
//implemented from gesture_detector.h
const char* gestureAnalysis(float previousX, float previousY, float currentX, float currentY)
{
float xOffset = currentX - previousX;
float yOffset = currentY - previousY;
if(xOffset == 0 && yOffset == 0)
{
return "TAP";
}
return "0";
}
這裏是我的Android.mk代碼:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := gestureDetector
LOCAL_SRC_FILES := gestureDetector.c NativeAbstractionLayer.cpp
LOCAL_LDLIBS := -landroid
include $(BUILD_SHARED_LIBRARY)
顯然,它似乎是自定義頭文件中定義的函數定義(gesture_detector.h
)未找到。我認爲這可能是我的Android.mk文件中的問題。
誰能告訴我我在這裏做錯了什麼?
也許,但有風險。這將掩蓋問題,直到運行時。但是,如果在這一點上無法解決,程序將崩潰。 –
@ChrisStratton - 感謝您的評論。其他一些建議? –
是的,考慮到C/C++拆分它可能是一個名稱修復問題。 –