【发布时间】:2019-05-09 13:10:37
【问题描述】:
就像在主题中一样,我是否需要带有本机功能的单独库才能加载带有主要功能的库?还是建议这样做?
此时,我使用 main.so 编译了那些本机函数,但我不确定是否应该这样做。
native 是在 main 之前加载的 lib
protected String[] getLibraries() {
return new String[] {
"SDL2",
"hidapi",
"native",
"main"
};
}
在里面我得到了一堆原生函数,其中一个就是例子
JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeRunMain(jstring library, jstring function, jobject array)
{
return Java_org_libsdl_app_SDLActivity_nativeRunMain("libmain.so", "SDL_main", NULL);
}
到目前为止,应用程序正在运行加载库,并没有尝试查看 log_android 是否来自主函数,但它没有。
【问题讨论】:
-
我不完全确定您所说的 “main function” 是什么意思。加载原生库后,VM会调用的函数是
JNI_OnLoad。 -
从表面上看,你在这个 nativeRunMain 原生方法中有一个无限递归。您想在这里实现什么目标?
-
@Michael 我的意思是 int main() 之一,我确实在某处读到 JNI_OnLoad 不是必需的,logcat 也没有说没有找到 JNI_OnLoad
-
@AlexCohn 不介意这个函数里面有什么。我想运行 libmain.so,但是一旦加载它就会立即完成并关闭应用程序。 pastebin.com/X8AAtuaS
-
我不确定我是否理解您粘贴的日志行来自何处。能否展示相关源代码?
标签: android java-native-interface shared-libraries sdl-2