美文网首页
编译过程与静态库&动态库

编译过程与静态库&动态库

作者: llyouss | 来源:发表于2019-11-07 06:50 被阅读0次

一、编译过程

编译过程.jpg

1、预编译(Preprocessing)

       预编译即预处理,编译器不能直接对预编译命令进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行处理。预编译主要处理以“#”开始的编译命令,如宏定义,条件编译,文件包含,去注释等。

 $ clang -E main.m  

2、编译(Compilation)

       将预编译处理完后的代码编译成汇编代码。此阶段还进行了词法、语法分析、生成LLVM IR中间代码、bitcode优化,最后生成汇编代码

$ clang -S -fobjc-arc main.m -o main.s

3、汇编(Assemble)

       把.s的汇编文件转成可执行的二进制文件。

4、链接(Linking)

       将汇编生成的目标文件与所有的引用的库一起链接打包到可执⾏文件当中。此阶段只链接静态库,如 .a .lib 等

二、静态库

       静态库是经过编译的二进制文件。在链接阶段,引用库一旦链接成功,将汇编生成的目标文件与引用的库一起链接打包到可执⾏文件当中。

优点

1、代码装载速度快,执行速度略比动态链接库快;
2、编译进二进制文件当中,相对安全。

缺点

1、代码冗余度高;
2、APP容量增大。

三、动态库

       程序编译阶段并不会链接到目标二进制文件当中,⽽是在程序运行时才被载⼊。

优点

1、减少打包之后的APP的容量;
2、共享内存,节约资源;
3、通过更新动态库,实现热更新;
4、冗余少,低耦合。

缺点

1、不稳定,不安全

相关文章

  • 静态库与动态库区别

    本文动态库、静态库区别部分转载自C++静态库与动态库 程序的编译过程如上图 静态库: 之所以成为【静态库】,是因为...

  • 静态库

    静态库 静态库动态库简介 .a 静态库:被编译好的二进制文件 静态库:.a, .framework 动态库: .d...

  • 编译过程与静态库&动态库

    一、编译过程 1、预编译(Preprocessing) 预编译即预处理,编译器不能直接对预编译命令进行编译,必须在...

  • iOS静态库及动态库

    2018-06-19 浅析静态库链接原理编译原理以及什么是静态库和动态库 转之: iOS 静态库和动态库(库详解)...

  • Ndk生成so和a库,然后主项目进行调用

    在 NDK 开发中引入第三方静态库和动态库 静态库和动态库 静态库 静态库文件后缀一般为 .a ,利用静态库编译成...

  • Xcode7中创建静态库

    一、静态库和动态库的区别: 静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存...

  • 创建静态库

    一、静态库和动态库的区别: 静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存...

  • 静态库与动态库相关知识笔记(转)

    "静态库与动态库"参考静态库与动态库的区别与优缺点

  • APP编译及加载过程

    编译过程 静态库&动态库 一.静态库在链接阶段,会将会将汇编生成的目标文件与引用的库一起链接打包到可执行文件中。二...

  • iOS开发-动态库加载(实时模块更新)

    动态库和静态库 静态库和动态库是相对编译期和运行期:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改...

网友评论

      本文标题:编译过程与静态库&动态库

      本文链接:https://www.haomeiwen.com/subject/wjzpbctx.html