如何在新项目中将prebuild .so(C类)文件中的函数调用到C ++类中。例如,我有一个项目-1 创建一个prebuild .so文件。现在在这个项目中我有一个名为“androidNdk”的C ++文件。 在这个类中,我只有一个返回整数值的函数。
int myFunction()
{
int number = 10;
return number;
}
此类的标头文件
int myFunction();
我创建一个新项目并加载这个.so文件并在C ++类中调用myfunction()。像这样 这是一个名为“newAndroidNdk”的新类。
void newFunction()
{
int str = myFunction();
printf("%s", str);
}
问题是当我使用ndk-build命令编译这个项目时,它会给我这个错误 “对myfunction的未定义引用”。
这是jni中的Android.mk - > lib文件夹
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libndkfunction-prebuilt
LOCAL_SRC_FILES := libndkfunction.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
这是新项目Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := ndkfun
LOCAL_SRC_FILES := ndkfun.c
LOCAL_SHARED_LIBRARIES := libndkfunction-prebuilt
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/jni/include
include $(BUILD_SHARED_LIBRARY)
帮我解决这个问题
答案 0 :(得分:0)
您不能直接从java调用本机代码,您需要使用JNI。您可以在官方java站点或Android开发者站点上阅读更多相关信息。你应该使用javah为java代码生成本机函数包装器,它更方便。或者手动声明静态函数并为其C / C ++声明编写包装器 Little tutorial