android - 如何从共享库中调用静态库函数?
问题描述
我已经构建了一个静态库(用于 armv64-v8a 架构的 main.a),它的根文件夹中有一个 main.cpp,它公开了一个静态函数,如下所示:
void main::global(void * _o, void * _i);
我的要求是在android中构建一个包装器并从android应用程序中调用这个函数。
我试过以下:
- 创建了一个 jni 文件夹。
- 创建了一个 jni/static/arm64-v8a 文件夹。
- 将 main.o 移到上述文件夹中。
- 在名为 export.cpp 的 jni 文件夹中创建了一个新文件,并将以下代码写入其中:
#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)
{
}
- 在 jni 文件夹下创建了一个 Application.mk 文件,内容如下
APP_ABI := arm64-v8a
APP_PLATFORM := android-23
- 在 jni 文件夹下创建了一个 Android.mk 文件,内容如下:
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"
但它不起作用并引发相同的错误。
解决方案
推荐阅读
- python - 如何通过从多个内容相似的 .csv 文件中导入数据来创建数据框?
- google-cloud-platform - 谷歌云平台:配额
- javascript - 使用正则表达式匹配两个逗号之间的字符串
- python-3.x - Mesibo 应用程序:进程以退出代码 139 完成(被信号 11 中断:SIGSEGV)
- google-app-engine - 在 Google Cloud Build 中上传构建文件夹
- swiftui - SwiftUI向navigationView添加按钮将填充应用于整个视图
- firebase - Flutter - 在future函数之后从getter中获取值
- firebase - Firebase 可调用 CloudFunction 和保护
- regex - mark.js 的非贪婪正则表达式
- r - 错误是在 dplyr 包中使用绝对差异?