首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在...中找不到JNI_OnLoad跳过init

在...中找不到JNI_OnLoad跳过init
EN

Stack Overflow用户
提问于 2012-08-03 22:49:09
回答 2查看 13.6K关注 0票数 8

在过去的一天左右,我一直收到这个消息,直到现在它还没有引起问题。我之前让我的代码与我的本地库一起运行,但今天我添加了一些新函数,它将再次无法工作。

LogCat中没有显示任何错误,但我的程序只是在我的设备上立即打开和关闭。没有消息说应用程序意外停止,只是屏幕上有一道黑色的闪光。

我在谷歌周围看了看,但这条消息出现的原因太多了。这是我的LogCat:

代码语言:javascript
复制
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

编辑:

当这种情况发生时,我今天添加的新函数被注释掉了。我最初得到了一个不同的错误,并希望确保我的旧代码仍然有效。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-03 22:55:13

函数JNI_OnLoad不是必需的。因此,如果您没有提供此功能,您的程序应该可以正常运行。

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

票数 13
EN

Stack Overflow用户

发布于 2015-06-27 21:54:25

在这里,正如@djedge提到的,JNI_OnLoad只是一个警告。这很可能有两个主要原因。第一个问题是您的Android.mk文件有问题。通常,它应该看起来像这样

代码语言:javascript
复制
    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++文件函数/方法定义相匹配。

下面是一个例子。头文件

代码语言:javascript
复制
  JNIEXPORT jlong JNICALL Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject

(JNIEnv *,jclass,jstring,jint);

C++文件

代码语言:javascript
复制
 JNIEXPORT jlong JNICALL  Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject
 (JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
  {

   //code goes here...
  }

在这一点上,com_example_jobs_myapplication可能错了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11798054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档