在…中没有找到JNI_OnLoad,跳过init

 2023-01-21    320  

问题描述

过去一天左右,我一直在收到此消息,直到现在,这还没有引起问题.我早些时候有代码可以与本机库一起运行,但是今天我添加了一些新功能,这再次无法使用.

LogCat中没有显示错误,但是我的程序只是在设备上立即打开并关闭.没有消息说该应用程序已经意外停止,只有在屏幕上有黑色闪光灯.

在…中没有找到JNI_OnLoad,跳过init

我已经环顾了Google,但是有很多不同的原因来介绍此消息.这是我的logcat:

08-03 10:44:50.186: D/dalvikvm(2143): Trying to load lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): Added shared lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): No JNI_OnLoad found in /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58, skipping init
08-03 10:44:50.288: I/DEBUG(1058): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-03 10:44:50.288: I/DEBUG(1058): Build fingerprint: 'LENOVO/IdeaPad_Tablet_A1_07/A1_07:2.3.4/GRJ22/eng.user.20120209.100319:user/release-keys'

我想知道的是:

1)这是No JNI_OnLoad消息导致我的程序不打开吗?

2)如果是这样,我知道我没有发布任何代码,但是有人可以解释此消息的一般想法.包括什么init是跳过的.

编辑:

我今天添加的新功能发生了评论.我最初遇到了不同的错误,并希望确保我的旧代码仍在工作.

推荐答案

功能JNI_OnLoad不是必需的.因此,如果您没有提供此功能,则您的程序应正常运行.

您的问题来自代码的另一部分.尝试使用ndk-gdb修复它.

其他推荐答案

在这里@djedge提到的JNI_OnLoad只是一个警告.很可能有两个主要原因.
首先,您的android.mk文件有问题.通常看起来像

LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    OPENCV_CAMERA_MODULES:=on
    OPENCV_INSTALL_MODULES:=on
    #OPENCV_LIB_TYPE:=SHARED
    include D:\NDK\MyApplication3\libraries\native\jni\OpenCV.mk
    LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
    LOCAL_C_INCLUDES += $(LOCAL_PATH)
    LOCAL_LDLIBS     += -llog -ldl
    LOCAL_MODULE     := detection_based_tracker
    include $(BUILD_SHARED_LIBRARY)

在这里请注意LOCAL_SRC_FILES是否提供了正确的C/C ++源文件.

嵌套问题将在您的功能签名中.如果您生成的标头文件,并且这些功能签名应与您的C/C ++文件函数/方法定义匹配.

这是一个示例.
标题文件

JNIEXPORT jlong JNICALL Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject

(jnienv *,jclass,jstring,jint);

C ++文件

JNIEXPORT jlong JNICALL  Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject
 (JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
  {

   //code goes here...
  }

这里 com_example_jobs_myapplication 可能是错误的.

以上所述是小编给大家介绍的在…中没有找到JNI_OnLoad,跳过init,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26206.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。