作者:蜜小嘟_546 | 来源:互联网 | 2023-06-17 04:25
今天因为工作上的需要,在网上找了一下移植开源库到android平台的方法。找到的资料,大部分是将如何利用NDK来编译CC++库。我也尝试着在NDK上做一些实验,发现问题特别多
今天因为工作上的需要,在网上找了一下移植开源库到android平台的方法。找到的资料,大部分是将如何利用NDK来编译C/C++库。我也尝试着在NDK上做一些实验,发现问题特别多。
我总觉得应该会有更好的方法,因为往android平台移植开源库应该是经常的事,不可能这么少资料。随着搜索范围的扩大,我看到了“make-standalone-toolchain.sh”这个脚本,接下来问题便迎刃而解了。感觉我们很多时候不是不会,而是找不到突破点。下面大概的描述一下过程。
1.make-standalone-toolchain.sh介绍
(1)这个脚本存放的路径:\android-ndk-r8e\build\tools(在NDK目录下);
(2)关于这个脚本的文档:\android-ndk-r8e\docs\STANDALONE-TOOLCHAIN.html(这里面有关于这个脚本使用说明);
(3)从字面意义上,我们就可以知道,通过运行这个脚本能够生成一套独立的android平台的交叉工具链。
2.make-standalone-toolchain.sh使用
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=/opt/android-toolchain
其中$NDK是NDK的安装目录,--platform是指定系统平台(会拷贝相关平台的库),--install-dir是指定工具链的存放路径
3.添加环境变量
把工具链目录下bin目录添加到PATH环境变量中。
4.实例(移植ffmpeg)
接下来以移植ffmpeg库为例,看下这个工具链怎么使用。其实到了这一步跟我们把开源库移植到嵌入式linux平台上是一样的了。继续……
(1)进入ffmpeg目录,运行./configure --help,显示如下
Usage: configure [options]
Options: [defaults in brackets after descriptions]
Standard options:
--help print this message
--logfile=FILE log tests and output to FILE [config.err]
--disable-logging do not log configure debug information
--prefix=PREFIX install in PREFIX []
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [PREFIX/lib]
--incdir=DIR install includes in DIR [PREFIX/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
……
从帮助里可以找到我们想要的信息,因为我不需要进程定制,所以就只选了几个跟平台有关的参数。由于参数蛮多的,所以我们最好还是写一个脚本:config.sh,
#!/bin/bash
./configure --prefix=/ffmpeg-0.6.5/in_dir \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=/opt/android/sysroot \
--cc=arm-linux-androideabi-gcc \
--cross-prefix=arm-linux-androideabi- \
--nm=arm-linux-androideabi-nm
(2)运行
# ./config.sh
# make
# make install
总结:其实主要把android的交叉工具链给独立出来,剩下的就是熟悉的嵌入式linux的工作了。