1

如何在新项目中将 prebuild .so(C 类)文件中的函数调用到 C++ 类中。例如,我有一个 project-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 -> lib 文件夹中的 Android.mk

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)

帮我解决这个问题

4

1 回答 1

0

您不能直接从 java 调用本机代码,您需要使用 JNI。您可以在官方 java 网站或 android 开发者网站上阅读更多相关信息。您应该使用 javah 为 java 代码生成本地函数包装器,它更方便。或者手动声明静态函数并为其 C/C++ 声明编写包装器 小教程

于 2015-08-13T06:16:58.427 回答