简述静态库和动态库

2024-08-31 14:32
文章标签 动态 静态 简述

本文主要是介绍简述静态库和动态库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 介绍

静态库:链接是直接拷贝到可执行文件中,app间不共用。文件为 .a 和 .framework 。

动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,APP间共用。文件为 .framework 和 .tdb 。

Embedded Binaries: 嵌入二进制,会把库文件嵌入到APP的Bundle中(ipa包中),程序运行时会从bundle中加载库。

Linked Frameworks and Libraries:链接库。

  •   如果是静态库.a,会直接拷贝到可执行文件中(二进制文件),不需要再运行时解决依赖问题。
  •   如果是动态库.dylib或者系统的framework,默认是在系统中的,运行时会从系统中加载。共用。

 注意:系统的`.framework`为动态库,开发者创建的动态库不允许上线App Store。  ?????

2 打包

2.1 使用Xcode创建framework工程或者static library工程

网上有很多教程,介绍也很多。

2.2 使用Cocoapods插件打包

主要是用到了插件:cocoapods-packager。通过修改`.podspec`文件的配置进行打包。

命令:`pod package XXX.podspec`

  • 插件打包,如果包含第三方framework,需要将其中的替身文件删除,否则会因识别不了替身文件导致打包出错。

错误

 

  • Pod package 编译时 需要将本地代码commit和清空`~/Library/Caches/CocoaPods/Pods/External/FrameworkName` 否则会导致新添加内容不会打进SDK中。

3 .a、.framework和.embeddedframework的区别

  • .a:只有代码,不包含图片等资源文件,需要配合`.h`。
  • .framework:除了包含代码文件,还有图片等资源文件,资源文件在`.framework`目录下。
  • .embeddedframework:是一个文件夹,包含`.framework`和资源文件的替身。

.framework 如果包含资源的bundle,而且没有把bundle添加到工程中的话,会因找不到bundle而崩溃。

  • .framework内部的二进制文件和资源文件会一起被打进可执行文件中;
  • .embeddedframework中的二进制文件会被打进可执行文件中,资源文件作为bundle存放在app的bundle内。

 

4 Build Phases

  • Target Dependencies: 项目依赖。
  • Compile Sources: 项目源文件.m,会打进二进制文件中。
  • Link Binary With Libraries: 链接的库文件和二进制文件,会打进二进制文件中。(Cocoapods-packager 是根据podspec文件进行打包)。
  • Copy Bundle Resources: 项目的资源文件。

这篇关于简述静态库和动态库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124172

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

Windows下php扩展开发c++动态库

PHP扩展开发,从零了解到初步完成一个小项目,经过三天的仔细研究,现整理如下 一、需求介绍 PHP扩展开发,调用自己之前的c++动态库,完成功能 二、项目之前 系统:windows xp  开发工具:vs 2008 web环境:apache2.4  PHP5.3.29-VC9-ts-x86 aphach和PHP 环境之前已经搭建完成 PHP源码:去官网http://www.php.n

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

C++/《C++为什么要有静态成员函数》

摘要        本文说明了什么是静态成员变量,什么是静态成员函数的概念,讨论了访问私有静态成员变量的三个方法。得出用静态成员函数访问静态私有成员变量是最佳方法即回答了“C++为什么要有静态成员函数“的问题。 类的静态成员 我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po