有关Android NDK的帮助

时间:2011-03-11 07:20:46

标签: android android-ndk

我是使用Android NDK的初学者。

我正在使用Eclipse并且我安装了cygwin来构建c文件以生成.so文件

但是在cygwin中构建c文件时,我总是收到错误

  

make:***没有规则来制作目标'file.c'......。停止

我尝试构建不同的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)
{
jboolean isCopy;
const char * szLogThis = (*env)->GetStringUTFChars(env, logThis, &isCopy);
(*env)->ReleaseStringUTFChars(env, logThis, szLogThis);
}

这是我的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)  

我搜索了错误原因的解决方案......但是对我来说没有任何作用。

有谁能告诉我我犯了哪个错误?

谢谢,

Siva Kumar

2 个答案:

答案 0 :(得分:0)

对于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.这不会自动发生。

答案 1 :(得分:0)

错误最有可能出现在以下两个方面:

  1. 在您使用的函数名称中。查看您的包名称是否与您在C代码中使用的函数名称匹配。 Java_com_ndktest_helloLog

  2. 验证Android.mk文件是否正在设置正确的目录以在jni目录中查找C源文件。

  3. 这是一个很棒的网站,可以设置你的第一个ndk程序。 非常容易理解,还包含截图: http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/