按照网上查到的例子试了试。目前可以编译出来.so文件。
用adb push传到了/system/lib下面。但是在Activity的onCreate里面
System.loadLibrary时报错:java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1479]: 33 unknown reloc type 8 @ ( 0)不知道原因是什么。
我用的emulator和Eclipse来开发。emulator是2.3。编译.so是用的2.3.1的source code.
native C的source code在$HOME/development/jni
编译时使用make libjnitest是不是我需要使用什么选项之类的东西?
哪位高手指点一下??谢谢!
用adb push传到了/system/lib下面。但是在Activity的onCreate里面
System.loadLibrary时报错:java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1479]: 33 unknown reloc type 8 @ ( 0)不知道原因是什么。
我用的emulator和Eclipse来开发。emulator是2.3。编译.so是用的2.3.1的source code.
native C的source code在$HOME/development/jni
编译时使用make libjnitest是不是我需要使用什么选项之类的东西?
哪位高手指点一下??谢谢!
解决方案 »
- 求助,android 如何开启相机LED闪光灯
- 原创Android小游戏-九宫格,有源码的哦!
- handler类的sendMessageAtTime(Message, long)该怎样理解
- 用android的模拟器下载的东西存在哪里
- 在tablelayout中不能嵌套linearlayout么?
- Android开发getApplicationContext出错
- Service中启动Activity失败
- 问个关于adb的问题
- 如何通过位移动画移动一个控件,最后能不闪烁
- 如何稳定地获取一个安卓设备序列号
- android中使用libgdx 加入重力感应的问题 高手请进
- 如何调用系统gallery打开指定文件夹中的图片
__android_log_print(int prio, const char *tag, const char *fmt, ...)
我没有用ndk。但是调用JNI的native函数还是有错。我再调调看看。
java.lang.UnsatisfiedLinkError: GetTest奇怪啊!
还需要对编译.so的Makefile 进行修改。 现在找不到正确的库文件
在emulator中怎么改成root?还有:修改Makefile?就是Android.mk吗?为什么?还有个信息:我nm了一下.so文件。函数名是:
Java_com_xxx_JniTest_JniTestMain_GetTest这个没有问题把?
JNI_OnLoad里?不加是用不了的。Android.mk不用吧,你贴出来看看,如果错了是没法生成so的。so里也不会有Java_com_xxx_JniTest_JniTestMain_GetTest
我试试。
1. 在eclipse里面建立一个Android project。
有一个Activity.然后加入代码:
static {
try {
System.loadLibrary("jnitest");
} catch(Exception e) {
e.printStackTrace(System.out);
}
}
public native String GetTest();
2。 编译一下它。
3。 用javah -classpath bin -d jni com.xxx.JniTest.JniTestMain生成.h文件
4。 再自己写一个.c文件:
#include "com_xxx_JniTest_JniTestMain.h"#define LOG_TAG "JNITest"
#undef LOG #include <utils/Log.h> JNIEXPORT jstring JNICALL Java_com_xxx_JniTest_JniTestMain_GetTest
(JNIEnv * env, jobject obj)
{
return (*env)->NewStringUTF(env, (char *)"JNITest Native String");
LOGD("Hello LIB!\n");
}
5。 然后在Ubuntu10.4里面,在Android 2.3的source code中
把.c,.h和Android.mk放在{Android_home}/developement/jni里面Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
com_xxx_JniTest_JniTestMain.c
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := libjnitest
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)6。 然后在Android_home目录下make libjnitest
生成了.so文件在out/...下面。
7。 把.so文件copy到windows机器上。然后用:
adb remount
adb push xxx.so /system/lib
8。 在eclipse中运行我的project
到System.loadLibrary("jnitest");
出错。此外,我还试了使用emulator的1.6版本。出错结果稍有区别:
java.lang.UnsatisfiedLinkError: Cannot found jnitest library.各位高手,请问我的哪一步可能有问题,给些提示吧。谢谢谢!~
String filename;
int i; if (loader != null) {
filename = loader.findLibrary(libname);
if (filename != null && nativeLoad(filename, loader))
return;
// else fall through to exception
} else {
filename = System.mapLibraryName(libname);
for (i = 0; i < mLibPaths.length; i++) {
if (false)
System.out.println("Trying " + mLibPaths[i] + filename);
if (nativeLoad(mLibPaths[i] + filename, loader))
return;
}
} throw new UnsatisfiedLinkError("Library " + libname + " not found");
}
很明显就是 nativeLoad 失败了。
这里很可能的原因就是:1. 文件不存在
2。 文件格式不正确这还没到加载java方法的那步就错了。仔细检查下吧
谢谢!你说的很对。我看了一下2.3的source code,应该是nativeLoad出错了。
1。文件不存在,我确定它已经被放在/system/lib下面了。而且Android的LD_LIBRARY_PATH也是这个路径。这个原因我觉得可以排除。
2。文件格式不正确。
我觉得这个可能性比较大。但是为什么不正确呢?我在development/xxx/下面用Android.mk来编译.so文件的方法不正确吗?
你们都是怎么生成.so文件的?能告诉我一下吗?谢谢!
额,有种更简单的 开发环境 建议你搭建。 Eclipse + Cygwin + CDT + NDK 我在这环境下开发NDK 会自动生成so文件 , 并将so 放到指定位置 。 并且如果 JNI 下的文件有语法错误也会给出提示 。 用起来很爽 。 http://www.cnblogs.com/luxiaofeng54/archive/2011/02/12/1952391.html
我是在SDK带的emulator上跑应用。所以我是否应该使用ARM的交叉编译工具编译我的.so?我在android source code中直接make生成的.so文件在:
out/target/product/generic_x86/system/lib请问是否在make之前需要设置什么东西?或者我需要安装交叉编译工具来编译生成.so?
我用的source code是for x86的。我需要用for ARM的。正在下载,等下载完了再试试。
谢谢大家!结贴。
我也出现了你这个问题。帮忙告诉下。
我用的emulator,当然是ARM的平台了。所以应该用Android for ARM的source code来编译,这样才能生成ARM平台的binary文件。
http://developer.android.com/sdk/index.html
只看到对x86的阿,麻烦你帮帮忙很急的!
http://download.csdn.net/detail/txzsp/2285294