繁体   English   中英

如何在Android(NDK)中修复本机cpp函数的UnsatisfiedLinkError

[英]How to fix an UnsatisfiedLinkError for native cpp function in Android (ndk)

我试图在c中运行一个简单的Android ndk应用程序,但是stringFromJNI()函数出现UnsatisfiedLink错误。

任何帮助,将不胜感激。 我的C语言很流利,但是我的Java有点生锈。 我一直在尝试很多有关命名的网络提示,但到目前为止还算不上什么。 这是我的文件:

hello-jni.c:

#include <string.h>
#include <jni.h>


jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

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

include $(BUILD_SHARED_LIBRARY)

我使用ndk-build进行编译,一切顺利,它为我提供了libnative.so,它位于项目目录中。 我用eclipse做其余的事情。

NdkFooActivity.java:

package com.narola.Testndk;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class NdkFooActivity extends Activity {

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

        Log.i("comes at point","hay...");
        Log.d("value is : ",""+stringFromJNI());
    }

    public native String  stringFromJNI();
    public native String  unimplementedStringFromJNI();

    static {
        System.loadLibrary("hello-jni");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_ndk_foo, menu);
        return true;
    }
}

感谢您提出任何建议,已经搜索了几个小时!

问题出在hello-jni.c文件中。 您在c文件中具有方法签名为Java_com_example_hellojni_HelloJni_stringFromJNI否则在您的活动中,程序包名称为com.narola.Testndk

方法签名的格式类似于Java_packagename_activityname_methodname (在包名称(。)中,点将由下划线代替)。 在您的情况下,请尝试像Java_com_narola_Testndk_NdkFooActivity_stringFromJNI

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM