用NDK调用第三方动态库.docxVIP

  • 15
  • 0
  • 约5.38千字
  • 约 13页
  • 2021-04-03 发布于山东
  • 举报
用 NDK 调用第三方动态库 现在一些 NDK 调用第三方库都是一些旧环境旧工具所完成的,我来给大家更新一下吧。 首先讲讲大概一个流程吧,这篇文章主要是写给自己的,怕忘记了,大神勿喷。 如何在 android 平台上调用别人给你的动态库呢, NDK 这工 具帮了我很大的忙。 首先我们要确定第三方动态库是 for arm 的,因为你要在手机 ( android 模拟器) 上运行, PC 机是 X86 的 手机大多数(好像有 INTEL 要加进手机了,太高端,相信大家还是用 ARM 架构的模拟器吧)是 ARM 的。自己动手做一个动态库来模拟第三方动态库,很多人这里会 用 LINUX 的 GCC 来编译(我是菜鸟我就是这样做的) ,后 面测试就悲剧了, 调用的时候直接弹出 incompatible target 不兼容目标,因为 linux 自带的 GCC 编译出来的是 X86 架构的,我们需要 ARM 架构的库,后来知道要用交叉编译,所 以下了一个 arm-linux-gcc 来编译,但是最终调用的时候会出现类似于缺失依赖库的问题,比如 ...could not load neeeded library for ...... 。最终还是用 NDK 里面的交叉编译工具才行。 好了啰嗦了这么多,现在开始动手吧。 PS:PC 机上要装有 linux (我的是 ubuntu12.0)环境,然后 windows 下 android 平台环境( JDK+SDK+NDK )要搭建好, 做 android 开发的这些肯定已经搞好了,这里我唯一想说的 就是 NDK R8 ,它已经在里面集成 linux 环境了, 所以现在可 以直接解压就可以使用,不用再装什么 cygwin 了,很方便, 本文就是用 NDK R8 来做的。这里给出安装说明链接 /view/76910ce2551810a6f52486a2.html 是 r7 的 第一步:制作第一个 linux 下的动态库(因为 android 的底层 就是 linux )来模拟第三方动态库 上面说了环境搭建好了之后,现在我们来从 NDK 中分离出 独立的工具链,这样我们在制作第三方动态库的时候就不用 写 makefile 了,首先你的 linux 环境必须装有 linux 版本的 NDK “ android-ndk-r8e-liunx-x86.zip ”, (上面说的 android 平 台的理所当然是 WINDOWS 版的 NDK “android-ndk-r8e-windows-x86.zip ”)在 linux 命令解压压缩包得 android-ndk-r8e, 然后再 linux 终端进入 android-ndk-r8e 的根目录, $ build/tools/make-standalone-toolchain.sh --platform= --install-dir= 按上述格式输入下面的命令 $ build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=/home/xx/toolchain/arm-linux-androideabi/ 这条命令的意思就是将交叉编译工具完整复制出来, android-14 是你的 API ,-dir 后面是你要复制安装到的目录, 执行完后你会发现在 /home/xxx/ 下发现你新建的 toolchain 目 录,到此我们已经从 NDK 中分离出独立的工具链了。最后 为了方便我们需要设置一下环境变量,如果不设置,每次你 都要这样写 /home/xx/toolchain/arm-linux-androideabi/bin/arm-linux-androi deabi-gcc -c Add.c 这样相当麻烦。在 Linux 终端输入 $ sudo -s 获取超级权限,再输 $gedit /etc/profile 在弹出的 profile 文 件里将以下内容: export PATH=$PATH:/home/laijingquan/toolchain/arm-linux-androidea bi/bin 加到文件的最后一行 (很多不理解最后一行什么意思, 就是讲它作为 profile 文件的最后一行,好吧,让我 2B 一下 吧,其实就是我不理解)再执行 $ source /etc/profile 让环境 变量立即生效。虽然步骤有点麻烦,但是做好后,以后开发 很方便。好,现在开始写 C 函数 很简单的函数,网上找的。 Add.c #include int Add(int x, int y) { return x+y; } Add.h:#ifndef _

文档评论(0)

1亿VIP精品文档

相关文档