Android的NDK“java.lang.UnsatisfiedLinkError中” [英] Android-NDK “java.lang.UnsatisfiedLinkError”

查看:358
本文介绍了Android的NDK“java.lang.UnsatisfiedLinkError中”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的NDK。

我有一个具有以下功能的CPP文件

  / *这是我们使用一个本地方法一个简单的例子JNI
 *返回一个新的虚拟机的字符串。请参见相应的Java源
 *文件位于:
 *
 *应用程序/样本/ HELLO-JNI /项目/ src目录/ COM /例子/ hellojni / HelloJni.java
 * /
JNIEXPORT的jstring JNICALL
Java_com_some_player_MainActivity_stringFromJNI(JNIEnv的* ENV,
                                                  jobject THIZ)
{
    返回env-> NewStringUTF(你好来自JNI!);
}

调用它的Java类

 包com.some.player;
公共类MainActivity延伸活动{
    公共本地字符串stringFromJNI();
    静态{
        的System.loadLibrary(HELLO-JNI);
    }     @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
       super.onCreate(savedInstanceState);
       的setContentView(R.layout.main);       TextView的电视=(的TextView)findViewById(R.id.textView);
       tv.setText(stringFromJNI());
    }
}

make文件

  LOCAL_PATH:= $(叫我-DIR)包括$(CLEAR_VARS)LOCAL_MODULE:= HELLO-JNI
LOCAL_SRC_FILES:= HELLO-jni.cpp包括$(BUILD_SHARED_LIBRARY)

问题是,当我调用本机的功能,我得到了

  07-28 23:42:34.256:E / AndroidRuntime(32398):java.lang.UnsatisfiedLinkError中:stringFromJNI


解决方案

其实我想通了,我需要添加

 的externC{
    JNIEXPORT的jstring JNICALL Java_com_some_player_MainActivity_stringFromJNI(JNIEnv的* ENV,jobject THIZ)
};

I am new to NDK.

I have a cpp file which has the following function

/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
JNIEXPORT jstring JNICALL
Java_com_some_player_MainActivity_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return env->NewStringUTF("Hello from JNI!");
}

The Java class that calls it

package com.some.player;
public class MainActivity extends Activity {
    public native String stringFromJNI();
    static {
        System.loadLibrary("hello-jni");
    }

     @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       TextView tv = (TextView) findViewById(R.id.textView);
       tv.setText(stringFromJNI());
    }
}

The make file

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp

include $(BUILD_SHARED_LIBRARY)

The problem is that when I call the native function I got the

07-28 23:42:34.256: E/AndroidRuntime(32398): java.lang.UnsatisfiedLinkError: stringFromJNI

解决方案

Actually I figured out that I need to add

extern "C" {
    JNIEXPORT jstring JNICALL Java_com_some_player_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz )
};

这篇关于Android的NDK“java.lang.UnsatisfiedLinkError中”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆