Android NDK初学者帮助,java.lang.UnsatifiedLinkError
我正在尝试创建我的第一个使用NDK的Android应用程序。我正在尝试使用live555.com源代码构建一个应用程序,将MP4文件从手机传输到其他地方 我使用的是32位Windows 7和JDK1.6.0_24、MOTODev 2.1以及最新的Android SDK和NDK工具包 到目前为止,我已经设置了一个新项目并创建了jni目录。在JNI中,我放置了源文件和Android.mk文件。如果我执行ndk构建,我会看到:Android NDK初学者帮助,java.lang.UnsatifiedLinkError,android,android-ndk,Android,Android Ndk,我正在尝试创建我的第一个使用NDK的Android应用程序。我正在尝试使用live555.com源代码构建一个应用程序,将MP4文件从手机传输到其他地方 我使用的是32位Windows 7和JDK1.6.0_24、MOTODev 2.1以及最新的Android SDK和NDK工具包 到目前为止,我已经设置了一个新项目并创建了jni目录。在JNI中,我放置了源文件和Android.mk文件。如果我执行ndk构建,我会看到: $ $NDK/ndk-build SharedLibrary : lib
$ $NDK/ndk-build
SharedLibrary : libtestProgs.so
Install : libtestProgs.so => libs/armeabi/libtestProgs.so
因此,本地库似乎正在建设中
当我运行我的应用程序时,它会崩溃,出现lava.lang.UnsatisfiedLinkError:startStream
startStream()是我试图在libtestProgs.so库中调用的方法
我检查过的东西:
libtestProgs.so是在libs/armeabi下的适当位置生成的
加载库(“testProgs”);在我尝试本机调用之前调用
运行javah-ojni.hcom.streamtest.MainActivity,并从.cpp文件中包含这个.h
这是我的MainActivity.java文件:
package com.streamtest;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
public static final String LOG_TAG = "StreamTest";
static
{
try
{
//System.loadLibrary("jnix");
System.loadLibrary("testProgs");
}
catch(Throwable e)
{
Log.e(LOG_TAG, e.toString());
throw new RuntimeException(e);
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// call our native code
Log.e(LOG_TAG, "About to call native code!");
startStream();
}
private native void startStream();
}
本机C++文件只是LIVE55 5.com的TestNoDuntRTSPServ.CPP文件。我将main()方法更改为Java本机方法。这是:
#include "com_streamtest_MainActivity.h"
#include "liveMedia.hh"
#include "BasicUsageEnvironment.hh"
void Java_com_streamtest_MainActivity_startStream(JNIEnv *env)
{
// Begin by setting up our usage environment:
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
uenv = BasicUsageEnvironment::createNew(*scheduler);
以下是LogCat输出:
04-12 08:40:27.934: ERROR/StreamTest(17130): About to call native code!
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): FATAL EXCEPTION: main
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): java.lang.UnsatisfiedLinkError: startStream
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at com.streamtest.MainActivity.startStream(Native Method)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at com.streamtest.MainActivity.onCreate(MainActivity.java:31)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.os.Handler.dispatchMessage(Handler.java:99)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.os.Looper.loop(Looper.java:123)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at java.lang.reflect.Method.invokeNative(Native Method)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at java.lang.reflect.Method.invoke(Method.java:521)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-12 08:40:27.965: ERROR/AndroidRuntime(17130): at dalvik.system.NativeStart.main(Native Method)
我想知道致命的例外:主线。在原始的.cpp文件中,它们是一个main()方法。在我的新文件中没有main()。这是问题的原因吗?如果是,如何将.cpp文件用作库?它需要main()方法吗
当我尝试运行我的第一个NDK应用程序时,感谢您的帮助
谢谢,
James编辑testOnDemandRTSPServer.cpp后,您是否:
当我遇到这个问题时,通常是因为我忘了做这两个问题中的一个。在编辑testondertpserver.cpp之后,您是否:
当我遇到这个问题时,通常是因为我忘了做这两个问题中的一个。您是否将testondertspserver.cpp包含在您的本地\u SRC\u文件变量中以及您的Android.mk文件中 当您执行ndk构建时,您应该已经看到正在编译的本地_SRC_文件中包含的每个c/c++文件。您应该看到这样的一行(如果有多个c/c++文件,则还有其他几行):
编译arm:libtestProgs您是否将testondertspserver.cpp包含在您的本地_SRC_文件变量和Android.mk文件中 当您执行ndk构建时,您应该已经看到正在编译的本地_SRC_文件中包含的每个c/c++文件。您应该看到这样的一行(如果有多个c/c++文件,则还有其他几行):
编译arm:libtestProgs您是否尝试过本讨论中提到的步骤
您是否尝试过本讨论中提到的步骤
尝试了这两种方法,但仍然出现相同的错误。我非常确定我已经完成了ndk构建步骤,但不确定如何在Eclipse中强制刷新。两种方法都不起作用。尝试了这两种方法,但仍然出现相同的错误。我非常确定我已经完成了ndk构建步骤,但不确定如何在Eclipse中强制刷新。两种方法都不起作用,就是这样。我检查了每个Android.mk文件,以确保每个变量都扩展到了正确的位置。其中一个包含错误。谢谢就这样。我检查了每个Android.mk文件,以确保每个变量都扩展到了正确的位置。其中一个包含错误。谢谢