NDK开发之编译原理与语法

本文详细介绍了Android NDK开发中的编译流程,包括预处理、编译、汇编和链接四步,并讲解了静态库与动态库的区别及创建方法。此外,还探讨了Makefile的规则、shell语法以及CMake在Android Studio中的应用,为Android原生开发提供了深入理解。
摘要由CSDN通过智能技术生成

1.编译流程

编译就是将高级语言的代码转化成可执行的二进制目标代码。主要包含四个步骤:预处理、编译、汇编、链接。

预处理:就是对各种预处理命令的处理,主要是宏替换、文件引入、去除空行和注释等。linux系统中预处理命令:gcc -E test.c -o test.i。-E表示gcc在预处理后停止编译、汇编和链接操作。

编译:将预处理后的代码翻译成汇编语言。会先分析后综合,分析就是进行词法、语法、语义分析和中间代码的生成,综合就是代码优化和代码生成。编译命令gcc -c test.i -o test.s。

 汇编:把编译生成的汇编代码.s文件转化成为可执行的二进制的目标文件。gcc -c test.s -o test.o。

链接:把多个的目标代码和所需的库文件链接生成目标代码。gcc  test.o -o test。-o是一个重命名选项,不使用-o选项时默认的是生成a.out,使用后可以生成可执行文件。

执行文件:./test。删除目标文件:rm -rf test。生成可执行文件:gcc -o test test.c。查看文件详情ls -lh。

2.静态库和动态库

静态库是目标文件(.o)的集合,一般以.a结尾,只存在生成可执行文件阶段。链接器将从库文件中取得所需代码复制到生成的可执行代码中,可执行代码中包含库代码的完整拷贝。多次使用就有多份拷贝,包会比较大;静态库有更新,所有使用它的程序都需要重新编译。命令将目标文件打包生成静态库:ar rcs libtest.a test.o。查看静态库内容:ar t libtest.a。  

动态库在链接阶段没有复制到目标代码中,在运行阶段才由系统动态到内存中。系统只要加载一次动态库,系统中不同的程序都可以获得内存中相同动态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值