【发布时间】:2014-05-01 16:05:22
【问题描述】:
看起来这是一个流行的问题,
我还是没有找到解决办法。
package name : app.cloudstringers
Java file : Completed.java
static {
try {
System.loadLibrary("ffmpeg");
} catch (UnsatisfiedLinkError e) {
Log.d("", "Error : " + e.toString());
}
}
// Define native method
public native int getString();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page_completed);
// Call native method
Log.d("", "" + getString());
C++ file : ffmpeg.cpp
#include <jni.h>
#include <android/log.h>
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jstring JNICALL Java_app_cloudstringers_Completed_getString(JNIEnv* env, jobject thiz)
{
jstring strRet = env->NewStringUTF("HelloWorld from JNI !");
return strRet;
}
#ifdef __cplusplus
}
#endif
Android.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := ffmpeg.cpp
include $(BUILD_SHARED_LIBRARY)
我运行应用程序但仍然收到错误异常UnsatisfiedLinkError : getString
知道如何解决这个问题的人,
请告诉我,
谢谢
更新
关注@dextor 的回答。对不起,因为我弄错了。对于这个问题,我唯一需要的就是从 public native int getString() 更改为 public native String getString()。
现在可以了。
【问题讨论】:
-
发布足够的堆栈跟踪信息,以包含您尝试加载库时生成的消息,以及 full 未满足的链接错误。还要提供定义本机方法的 Java 文件的名称。
-
并确保在您的 catch 块中包含 e.printStackTrace() 以便您获得有意义的错误报告。
-
尝试捕获
System.loadLibrary("ffmpeg");未运行。没关系。
标签: android c++ android-ndk unsatisfiedlinkerror android.mk