Android JNI找不到第三方库的解决方案 cannot load library

最近做一个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的mk如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := bb

LOCAL_SRC_FILES := libbb.so

include $(PREBUILT_SHARED_LIBRARY)

3.libaa.so的mk文件需要引入上面的mk。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := aa
LOCAL_SRC_FILES := aa.cpp
LOCAL_LDLIBS := -llog

LOCAL_SHARED_LIBRARIES := bb
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/prebuilt/Android.mk

这样在编译阶段就可以连接到第三方库咯。

2.运行阶段找不到库

在运行阶段找不到库就是Android的事情了。后来发现是load库的顺序(默哀一个,破顺序。。)。

static
	{
		System.loadLibrary("bb");
		System.loadLibrary("aa");
    }

先load第三方库,再load自己的库,因为aa库要用bb库里的方法,是依赖于bb库的,所以要先load。。

这样在运行阶段也可以找到库咯。

时间: 2024-12-18 17:32:36

Android JNI找不到第三方库的解决方案 cannot load library的相关文章

复制工程或修改工程名字后找不到第三方库解决方法

问题: couldn't found -lwexin 等与第三方库有关的关键词报错,如上图. 解决方法:在工程文件中删掉第三方库的引用,然后再重新添加进来.command+B,OK. 复制工程或修改工程名字后找不到第三方库解决方法

android开发常用组件和第三方库(二)

TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending, github搜索:https://github.com/search 目录 UI UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其它 动画 网络相关 响应式编程 地图 数据库 图像浏览及处理 视频音频处理 测试及调试 动态更新热更新 消息推送 完整项目 插件 出名框架 其他 好的文章 收集android上开源的酷炫的交互动

iOS开发遇到的坑之六--使用cocopods管理第三方库时,编译出现Library not found for -lPods问题的解决方法

在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法编译! 这里给出几种解决办法: 第一种: a) Search from 'Library' from the Target Settings view and double-click to inspect the value of Library Search Paths b) There are

使用ndk交叉编译android各平台版本的第三方库

只要弄明白了ndk-bundle的目录结构,交叉编译的基本原理就可以自行编写脚本去编译了.从仓库拿下代码包后,一般在linux平台下编译当前平台使用的库,只要使用其自动配置脚本configure进行平台相关的配置,配置成功后就可以执行make进行编译以及安装.configure通常会在/usr/inclue和/usr/lib下检查平台支持的接口,编译时需要使用binutils和gcc两个工具集合.所以要使用ndk进行交叉编译,最基本就是要对上面4要素进行配置,就可以配置出最基本的交叉平台环境,顺

Android打包jar 和使用第三方库

作者:silence鼬. 时间:2015年6月28日 在开发中常会打包好一些常用的代码,生成jar,方便在其他的项目中使用,提高开发效率.Android怎么使用呐. 首先介绍jar包的生成 新建Android工程,如下图,勾选 mark this project as a library,然后一路finish 没有勾选也无所谓,Android工程可以转为library.工程右键 property ->android 勾选 Is Library 写完代码之后再bin目录下有生成的jar.如图 好了

【iOS】CocoaPods 中找不到第三方库

Github 上下载的开源项目,运行后出现的 [iOS]build diff: /../Podfile.lock: No such file or directory 解决后,又出现了这个问题. 解决方法: 选择Target -> Build Settings 菜单,找到\”User Header Search Paths\”设置项新增一个值"${SRCROOT}",并且选择\”Recursive\” .如图所示: 参考: http://www.cocoachina.com/bb

Android JNI如何调用第三方库

http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的so库需要用jni封装一层,等于是在jni的C++代码里调用第三方库的方法,然后整个项目在Android上运行出结果. 自己用jni生成的so是libaa.so 使用的第三方库是libbb.so. 到目前为止,遇到的问题是libbb各种找不到.libbb库去哪儿了? E/AndroidRuntime

创建podSpec,使用pod管理第三方库

提要: podfile文件会先读取.podspec文件,根据.podspec文件的指向来下载第三方库到项目中. 本文先通过一.二.三项,这三个步骤讲解了如何建立一个.podspec文件在本地.cocoaPod库,第三方库在远程机器的例子. 后文中的第四项,讲解了.podspec文件在本地项目中,第三方库在远程机器的设置方法:最后讲了.podspec文件在本地项目中,第三方库也在本地项目中的设置方法. 正文讲解: 一.创建需要pod管理的第三方库 (1) 本地创建第三方库起名为lvPodLibra

python如何安装第三方库

1.python集成开发环境pycharm如何安装第三方库 http://blog.csdn.net/qiannianguji01/article/details/50397046 有的时候安装不上第三方库,可以尝试使用pip安装 2.PIP命令行如何安装第三方库 首先保证你安装了pip,cmd里打pip能找到pip的可执行命令 pip install tushare 默认情况下,pip安装的第三方库是在python可执行程序目录下: 一般情况下在 python 目录下,举个例子,我的 pyth