gpt4 book ai didi

java - 无法用 .so 文件解析对应的 JNI 函数

转载 作者:行者123 更新时间:2023-11-29 04:46:10 28 4
gpt4 key购买 nike

我是 JNI 的新手,我必须使用现有的已编译 .so 文件。问题是 Android Studio 无法找到 JNI 函数。我用类似于此的代码加载我的库:

public class MyService extends Service{

static {
System.loadLibrary("mylib");
}

private native void example();

}

它给我一个错误“无法解析相应的 JNI 函数 Java_com_company_app_MyService_example”。

如果我运行此命令(在终端中)

arm-linux-androideabi-nm -DC mylib.so

我得到,在其他人之间(我只需要库的几个功能),

register_com_company_app_service(_JNIEnv*)

(而不是 MyService 有服务)

我能做什么?是否存在加载库问题或其他问题?

我也尝试在“服务”中折射类名“MyService”,但“Java_com_company_app_service_example”也没有解决!

提前致谢!

最佳答案

您需要记住,函数签名必须与其在 Java 中的名称匹配,并且必须导出。
此外,成员函数接收对象作为第一个参数,静态函数接收类。

#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_Namespace_Class_MemberFunction
(JNIEnv *, jobject);

JNIEXPORT void JNICALL Java_Namespace_Class_StaticFunction
(JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif

所以在你的情况下会是:

 JNIEXPORT void JNICALL Java_com_company_app_MyService_example
(JNIEnv *, jobject);

关于java - 无法用 .so 文件解析对应的 JNI 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com