Android:JNI与NDK(二)交叉编译与动态库,静态库

本篇目录一、前言本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,linux操作系统基本是同样适用的。交叉编译就是在A平台编译出可以在B平台执行的文件,对于我们安卓开发者来说交叉编译就是在window或者mac或者linux系统上编译出可在安卓系统上运行的可执行文件,什么时候需要用到交叉编译呢?音视频开发...
摘要由CSDN通过智能技术生成
本篇目录

一、前言

本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,linux操作系统基本是同样适用的。

交叉编译就是在A平台编译出可以在B平台执行的文件,对于我们安卓开发者来说交叉编译就是在window或者mac或者linux系统上编译出可在安卓系统上运行的可执行文件,什么时候需要用到交叉编译呢?音视频开发基本都会用到ffmpeg,opengl es等三方库,这时我们就需要在window或者mac或者linux系统上编译出可在安卓系统执行的文件,这里可编译出静态库或者动态库使用,这时候就会用到交叉编译。

本篇虽然是一些基础的知识或者操作,但是对于后续三方库的编译移植,CMake的配置是很重要的,否则后续遇到没用过的三方库你会感觉无从下手编译,很多CMake的配置也只是会配置而不懂具体什么含义。

进行本篇学习请先自己配置好MinGW(C/C++编译器)编译环境并配置到系统环境变量中,这些都是基础的操作,自己查询一下配置好就可以了,此外还需要自己下载好安卓平台提供的交叉编译工具链,下载地址:安卓平台交叉编译工具,我下载的是17c版本的。

好了,进入本文的学习

下文相关代码均来自:相关演示代码

二、常用C/C++编译器了解以及C/C++文件编译过程
常用C/C++编译器
编译器名称 描述
clang clang 是一个C、C++、Object-C的轻量级编译器。基于LLVM (LLVM是以C++编写而成的构架编译器的框架系统,可以说是一个用于开发编译器相关的库),对比gcc,它具有编译速度更快、编译产出更小等优点,但是某些软件在使用clang编译时候因为源码中内容的问题会出现错误
gcc GNU C编译器。原本只能处理C语言,很快扩展,变得可处理C++`。(GNU计划,又称革奴计划。目标是创建一套完全自由的操作系统)
g++ GNU c++编译器,后缀为.c的源文件,gcc把它当作是C程序,而g++当作是C++程序;后缀为.cpp`的,两者都会认为是c++程序,g++会自动链接c++标准库stl,gcc不会,gcc不会定义__cplusplus宏,而g++会
C/C++文件编译过程

C/C++文件要经过预处理、编译、汇编、和连接才能变成可执行文件。

过程名称 主要作用
预处理 预处理阶段主要处理include和define等。它把#include包含进来的.h 文件插入到#include所在的位置,把源程序中使用到的用#define定义的宏用实际的字符串代替
编译 编译阶段,编译器检查代码的规范性、语法错误等,检查无误后,编译器把代码翻译成汇编语言。
汇编 汇编阶段把 .s文件翻译成二进制机器指令文件.o,这个阶段接收.c, .i, .s的文件都没有问题
连接 链接阶段,链接的是其余的函数库,比如我们自己编写的c/c++文件中用到了三方的函数库,在连接阶段就需要连接三方函数库,如果连接不到就会报错

比如在命令行中我们执行如下命令:

gcc -o d:\main C:\Users\wanglei55\Desktop\main.c

将C:\Users\wanglei55\Desktop\main.c文件编译为可执行文件,输出到d盘名称为main,整个编译过程就包括预处理、编译、汇编、和连接过程。

以上主要介绍了常用C/C++编译器的区别以及C/C++文件的编译过程,大体了解一下即可。

三、交叉编译

接下来我们具体看一下交叉编译的流程,我们先来看一下window平台怎么编译出可执行文件。

我们编写如下C文件:
main.c

#include <stdio.h>
int main()
{
	int nn = 55;
    printf("nn = %d\n", nn);
    return 0;
}

很简单,就是输出一些信息,接下来我们将main.c用gcc编译器编译为可执行文件,执行如下命令:

gcc -o d:\main C:\Users\wanglei55\Desktop\main.c

这样就会在

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值