首页 > 解决方案 > 如何从共享库中调用静态库函数?

问题描述

我已经构建了一个静态库(用于 armv64-v8a 架构的 main.a),它的根文件夹中有一个 main.cpp,它公开了一个静态函数,如下所示:

void main::global(void * _o, void * _i);

我的要求是在android中构建一个包装器并从android应用程序中调用这个函数。

我试过以下:

    #include <jni.h>
    #include <string.h>
    #include <stdlib.h>
    #include <main.h>

    JNIEXPORT void JNICALL Java_com_example_test_sendData(JNIEnv *env, jobject obj, jbyteArray outData, jbyteArray inData)
    {
    }
APP_ABI := arm64-v8a
APP_PLATFORM := android-23
LOCAL_PATH := $(call my-dir)

########################
# prepare static lib
include $(CLEAR_VARS)
LOCAL_MODULE    := main
LOCAL_SRC_FILES := static/$(TARGET_ARCH_ABI)/main.a
include $(PREBUILT_STATIC_LIBRARY)
########################

########################
# prepare export
include $(CLEAR_VARS)
LOCAL_MODULE    := export
LOCAL_SRC_FILES := export.cpp
LOCAL_STATIC_LIBRARIES := main
include $(BUILD_SHARED_LIBRARY)
########################

现在,如果我运行ndk-build命令,它将引发如下错误:

[arm64-v8a] Compile++      : export <= export.cpp
jni/export.cpp:4:10: fatal error: 'main.h' file not found
#include <main.h>
         ^~~~~~~~~
1 error generated.
make: *** [obj/local/arm64-v8a/objs/export/export.o] Error 1

请帮我解决这个问题。

尝试更改#include <main.h>为,#include "main.h"但它不起作用并引发相同的错误。

标签: androidc++candroid-ndkndk-build

解决方案


推荐阅读