Как я могу исправить это роковое исключение? - PullRequest
5 голосов
/ 08 апреля 2011

Я портирую свой код C / C ++ в игру Android с помощью NDK, но у меня возникают проблемы с началом работы.

Я скачал NDK-r5b с developer.android.com и у меня естьустановлен Cygwin.

Я даже не могу запустить программу Hello-jni, предоставленную в примерах NDK.

Когда я запускаю:

$ 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, но проблема сохраняется.


Я попытался запустить пример программы HELLO-JNI в NDK через Eclipse IDE.В 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 ]

4 голосов
/ 07 августа 2011

У меня была такая же проблема, и я понял это. То, что заставляло его портить меня, было в Свойствах проекта -> Сборка C / C ++ -> Команда сборки: было установлено 'bash ndk-build' вместо 'bash C: \ android-ndk-r6 \ ndk- построить '

3 голосов
/ 23 июня 2011

У меня была эта проблема. Оказалось, что цепочка инструментов GNU не была установлена, когда я установил Cygwin, а make собирался из другого SDK, установленного на моей сборочной машине. Исправление состояло в том, чтобы переустановить Cygwin и проверить, установлены ли инструменты Gnu. (Я думаю, что заголовок «Devel» в настройке Cygwin. По умолчанию не устанавливается, измените на «установить»). НТН

1 голос
/ 16 мая 2012

Я решил это в Eclipse, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши имя проекта и выберите «свойства»
  2. В «Сборке C / C ++»выберите «секцию компоновщика», затем в группе «компоновщик» введите в текстовое поле «команда компоновки» следующее:

    bash «_cygwin_home_ \ home \ android-ndk-r6b \ ndk-build»

    • замените "_cygwin_home_" на ваш фактический путь к cygwin,
    • Я помещаю папку ndk в домашнюю папку в папке установки cygwin (как вы можете видеть).

Надеюсь, это поможет вам.

...