我是使用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
答案 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)
错误最有可能出现在以下两个方面:
在您使用的函数名称中。查看您的包名称是否与您在C代码中使用的函数名称匹配。 Java_com_ndktest_helloLog
验证Android.mk文件是否正在设置正确的目录以在jni目录中查找C源文件。
这是一个很棒的网站,可以设置你的第一个ndk程序。 非常容易理解,还包含截图: http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ 强>