我怎样才能解决这个致命的异常?

时间:2011-04-08 07:15:16

标签: android cygwin android-ndk gnu-make

我使用NDK将我的C / C ++代码移植到Android游戏中,但是我无法入门。

我从developer.android.com下载了NDK-r5b,我已经安装了Cygwin。

我甚至无法运行NDK样本中提供的Hello-jni程序。

当我跑步时:

$ cd /cygdrive/c/android/android-ndk-r5b/samples/hello-jni 
$ ndk-build 

我得到ERROR: You are using a non-Cygwin compatible Make program

我尝试安装GNUMake 3.81,但问题仍然存在。


我尝试通过Eclipse IDE在NDK中运行HELLO-JNI示例程序。 Android AVD上有一个强制关闭,logcat显示如下异常:

04-08 12:32:11.609: ERROR/AndroidRuntime(274): FATAL EXCEPTION: main 
04-08 12:32:11.609: ERROR/AndroidRuntime(274): 
java.lang.ExceptionInInitializerError 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
java.lang.Class.newInstanceImpl(Native Method) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
java.lang.Class.newInstance(Class.java:1429) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 
2577) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 
2679) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.os.Handler.dispatchMessage(Handler.java:99) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.os.Looper.loop(Looper.java:123) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
android.app.ActivityThread.main(ActivityThread.java:4627) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
java.lang.reflect.Method.invokeNative(Native Method) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
java.lang.reflect.Method.invoke(Method.java:521) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
com.android.internal.os.ZygoteInit 
$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
dalvik.system.NativeStart.main(Native Method) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274): Caused by: 
java.lang.UnsatisfiedLinkError: Library hello-jni not found 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
java.lang.Runtime.loadLibrary(Runtime.java:461) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
java.lang.System.loadLibrary(System.java:557) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     at 
com.example.hellojni.HelloJni.<clinit>(HelloJni.java:67) 
04-08 12:32:11.609: ERROR/AndroidRuntime(274):     ... 15 more 
04-08 12:32:11.678: WARN/ActivityManager(59):   Force finishing 
activity com.example.hellojni/.HelloJni 
04-08 12:32:12.340: WARN/ActivityManager(59): Activity pause timeout 
for HistoryRecord{44f925c8 com.example.hellojni/.HelloJni} 

我该如何做到这一点?

3 个答案:

答案 0 :(得分:4)

我有同样的问题,我想出来了。导致它为我搞砸的事情是项目属性 - &gt; C / C ++ Build - &gt;构建命令:设置为'bash ndk-build'而不是'bash C:\ android-ndk-r6 \ ndk-build'

答案 1 :(得分:3)

我有这个问题。事实证明,当我安装Cygwin时没有安装GNU工具链,并且正在从我的构建机器上安装的另一个SDK中获取make。解决方法是重新安装Cygwin并检查是否安装了Gnu工具。 (我认为标题是Cygwin设置中的'Devel'。默认情况下不安装,更改为'install')。 HTH

答案 2 :(得分:1)

我通过执行以下操作在Eclipse中解决了这个问题:

  1. 右键单击项目名称,然后选择“属性”
  2. 在“C / C ++ Build”中选择“builder”部分,然后在“builder”组中将以下内容放入“build command”文本框中:

    bash“_cygwin_home_ \ home \ android-ndk-r6b \ ndk-build”

    • 将“_cygwin_home_”替换为您实际的cygwin路径,
    • 我将ndk文件夹放在cygwin installtion文件夹中的home文件夹中(如你所见)。
  3. 我希望这对你有所帮助。