Помощь относительно Android NDK - PullRequest
1 голос
/ 11 марта 2011

Я новичок в использовании Android NDK.

Я использую Eclipse, и я установил cygwin для сборки файла c для генерации файла .so

Но при сборке файла c вcygwin Я всегда получаю сообщение об ошибке

make: *** Нет правила для создания цели 'file.c' ... .Stop

Я пытался создать другой Cкоды, но для каждого файла он говорит ту же ошибку ..

Вот исходный код:

public class ndktest extends Activity 
{
 static {   
    System.loadLibrary("ndkt");   
   }
 private native void helloLog(String logThis);  
 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    helloLog("this is to test log file");
 }   }

file.c

void Java_com_ndktest_helloLog(JNIEnv * env, jobject this, jstring logThis)<br> {<br> jboolean isCopy;<br> const char * szLogThis = (*env)->GetStringUTFChars(env, logThis, &isCopy);<br> (*env)->ReleaseStringUTFChars(env, logThis, szLogThis);<br> }

А вот мой Android.mk

LOCAL_PATH := $(call my-dir)   
include $(CLEAR_VARS)   
LOCAL_LDLIBS := -llog   
LOCAL_MODULE    := ndkt 
LOCAL_SRC_FILES := file.c
include $(BUILD_SHARED_LIBRARY)  

Я искал решение для причины ошибки ... но у меня ничего не работает.

Может кто-нибудь сказать мне, где я делаюошибка?

Спасибо,

Шива Кумар

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Скорее всего, ошибка заключается в одной из следующих двух областей:

  1. В названии функции, которое вы использовали. Посмотрите, совпадает ли имя вашего пакета с именем функции, которое вы использовали в коде C. Java_com_ndktest_helloLog

  2. Убедитесь, что файл Android.mk устанавливает правильный каталог для поиска исходного файла C в каталоге jni.

Это отличный сайт для настройки вашей первой программы ndk. Очень легко следить, а также содержит скриншоты: http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/

0 голосов
/ 15 марта 2011

Для вашего java.lang.UnsatisfiedLinkError вам необходимо выяснить, что такое полное сообщение.

Вы увидите исключение на

Runtime.loadLibrary(String, ClassLoader) line: 434  

Если вы пройдете мимо этого, вы получите

ExceptionInInitializerError.<init>(Throwable) line: 59  

Теперь вы можете увидеть содержимое исключения, и оно будет выглядеть примерно так:

java.lang.UnsatisfiedLinkError: невозможно загрузить библиотеку: reloc_library [1311]: 1281 не может найти 'SomethingInterestingWouldBeHere' ...

И это должно помочь выяснить, что не так.

Имейте в виду, что вам нужно вручную определить порядок загрузки для ваших библиотек; если библиотека A зависит от библиотеки B, вам нужно загрузить B, тогда A. Это не происходит автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...