Android JNI找不到第三方库的解决方案 cannot load library
来源:互联网 发布:vb.net与数据库连接 编辑:程序博客网 时间:2024/05/16 11:50
转:http://www.2cto.com/kf/201504/388764.html
最近做一个jni项目,拿到的so库需要用jni封装一层,等于是在jni的C++代码里调用第三方库的方法,然后整个项目在Android上运行出结果。
自己用jni生成的so是libaa.so 使用的第三方库是libbb.so。
到目前为止,遇到的问题是libbb各种找不到。libbb库去哪儿了?
E/AndroidRuntime(11626): Caused by: java.lang.UnsatisfiedLinkError:
Cannot load library: soinfo_link_image(linker.cpp:1640):could not load library libbb.so needed by libaa.so;
caused by load_library(linker.cpp:750): library libbb.so not found
以上错误是在运行阶段发生的,事实上编译阶段也发生过找不到第三方的问题,表现就是库里实现的方法undefined。
分两方面解决
1,编译阶段找不到库,需要修改MK文件。
1.libbb.so放在jni/prebuilt文件夹(自己新建),同时把Android.mk复制一份到prebuilt下。
2.libbb.so的Android.mk如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := bbLOCAL_SRC_FILES := libbb.soinclude $(PREBUILT_SHARED_LIBRARY)
3.libaa.so的android.mk文件需要引入上面的android.mk。
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := aaLOCAL_SRC_FILES := aa.cppLOCAL_LDLIBS := -llogLOCAL_SHARED_LIBRARIES := bbinclude $(BUILD_SHARED_LIBRARY)include $(LOCAL_PATH)/prebuilt/Android.mk
这样在编译阶段就可以连接到第三方库咯。
注意:prebuilt目录得放在libaaa/jni/下,即libaaa/jni/prebuilt
2.APK 运行阶段找不到库
在运行阶段找不到库就是Android的事情了。后来发现是load库的顺序(默哀一个,破顺序。。)。
static {System.loadLibrary(bb);System.loadLibrary(aa); }先load第三方库,再load自己的库,因为aa库要用bb库里的方法,是依赖于bb库的,所以要先load。。
这样在运行阶段也可以找到库咯。
3.elf文件运行阶段找不到库
现象
root@generic:/data/local/tmp # ./testload
./testload
CANNOT LINK EXECUTABLE: could not load library "libktest.so" needed by "./testlo
ad"; caused by library "libktest.so" not found
处理方式
1|root@generic:/data/local/tmp # LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp
RARY_PATH:/data/local/tmp <
root@generic:/data/local/tmp # ./testload
./testload
- Android JNI找不到第三方库的解决方案 cannot load library
- Android JNI找不到第三方库的解决方案 cannot load library
- Android jni 找不到第三方库
- android JNI 错误“Cannot load library: soinfo_relocate”
- android中JNI利用第三方的so库
- android JNI 调用第三方动态库
- Android-jni 调用第三方动态库
- Android.mk JNI 调用第三方库
- Cannot load vendor library [libmysql.dll or libmysqld.dll]. 找不到指定的模块
- 使用第三方库出现找不到so库UnsatisfiedLinkError错误的原因以及解决方案
- 使用第三方库出现找不到so库UnsatisfiedLinkError错误的原因以及解决方案
- C#引用第三方动态连接库dll时出现 System.MissingMethodException: 找不到方法的解决方案
- Android使用第三方库打包出现冲突的解决方案
- 64位Eclipse运行提示“Failed to load the JNI shared library”的一个解决方案
- 启动eclipse的时候出现failed to load the jni shared library 解决方案
- eclipse(优化五) eclipse启动时,报"failed to load the JNI shared library"的解决方案
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方案
- Android Studio 新建一个module形式的第三方library
- 安卓微博评论界面
- msm_flash_init_module执行注册流程
- Linux内核中Netfilter架构介绍
- 开源应用架构之Selenium WebDriver(中)
- 微博-随便看看
- Android JNI找不到第三方库的解决方案 cannot load library
- <start>
- [Android]类似淘宝的数字自增自减文本
- leetcode Search in Rotated Sorted Array
- JavaBean的方法的命名必须遵循的规则
- ZOJ 3870 Team Formation && ZOJ 3872Beauty of Array
- POJ1930Dead Fraction
- Uva 1636
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)