ubuntu android交叉编译c程序 ndk

本文介绍如何在Ubuntu 12.04 x64环境下使用Android NDK r8b编译一个简单的HelloWorld程序,并将其部署到Android设备上进行运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自: http://blog.chinaunix.net/uid-20718384-id-3324194.html

分类: LINUX

环境:ubuntu 12.04 x64

1. 下载ndk

  1. wget http://dl.google.com/android/ndk/android-ndk-r8b-linux-x86.tar.bz2
  2. tar xfj android-ndk-r8b-linux-x86.tar.bz2

2. 设置环境变量

  1. export PATH=/home/android/android-ndk-r8b:$PATH
3. helloworld project结构

  1. mkdir hello
  2. cd hello
  3. mkdir jni
  4. cd jni

vi hello.c:

  1. // hello.c
  2. #include <stdio.h>

  3. int main(int argc, char *argv[])
  4. {
  5.     printf("hello\n");

  6.     return 0;
  7. }


vi Android.mk:


  1. // Android.mk
  2. LOCAL_PATH:= $(call my-dir)

  3. include $(CLEAR_VARS)
  4. LOCAL_SRC_FILES:= hello.c
  5. LOCAL_MODULE:= hello

  6. LOCAL_FORCE_STATIC_EXECUTABLE := true

  7. include $(BUILD_EXECUTABLE)
4. 编译(生成可执行文件在../libs/armeabi/)

  1. ndk-build
5. 传到手机上运行

  1. cd ../libs/armeabi
  2. adb push hello /sdcard/hello
  3. adb shell
  4. su
  5. cd /sdcard
  6. cp hello /data
  7. chmod 755 hello
  8. ./hello
在sdcard下面执行时,会出现permission denied,移动到/data目录下,添加执行权限后,可以正常执行。

参考: http://leave001.blog.163.com/blog/static/16269129320111128113217384/

### 交叉编译FFmpeg生成共享库(.so文件) #### 准备工作 为了在Ubuntu系统上成功完成FFmpeg的交叉编译,需要先安装必要的工具链和其他依赖项。这通常涉及设置Android NDK环境以及下载FFmpeg源码。 对于工具链的选择,在Linux环境下推荐使用官方提供的`android-ndk-r13b-linux-x86_64.zip`来构建适用于Android平台的应用程序[^4]。确保NDK已正确解压并配置好PATH变量以便后续操作能够顺利执行。 #### 下载FFmpeg源代码 访问FFmpeg官方网站获取最新版本的压缩包,例如`ffmpeg-3.2.1.tar.gz`,将其放置于合适的工作目录内,并通过命令行解开该档案: ```bash tar -zxvf ffmpeg-3.2.1.tar.gz cd ffmpeg-3.2.1/ ``` #### 设置编译参数 定义目标架构、API级别以及其他特定选项。这里假设要为目标设备创建ARMv7a架构下的动态链接库(`.so`),可以采用如下方式指定输出路径和相关配置: ```bash export PREFIX=$(pwd)/android/ffmpeg ./configure \ --target-os=android \ --arch=arm \ --cpu=armv7-a \ --enable-shared \ --disable-static \ --cross-prefix=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- \ --sysroot=$ANDROID_NDK_HOME/platforms/android-21/arch-arm \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --prefix="$PREFIX" ``` 上述指令中的某些部分可能需根据实际使用的NDK版本和个人需求做出调整,比如改变CPU型号或启用其他特性等[^5]。 #### 编译过程 当所有的准备工作完成后就可以开始正式编译了。运行make命令启动编译流程,视计算机性能而定此过程可能会持续一段时间;之后再利用make install将生成的结果复制到之前设定的目标位置。 ```bash make clean && make -j$(nproc) && make install ``` 这样就完成了基于Ubuntu系统的FFmpeg交叉编译任务,最终会在$PREFIX/lib找到所需的`.so`形式的共享库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值