阿里云
云栖社区2017年度内容特辑
发表主题 回复主题
  • 341阅读
  • 0回复

[体验反馈]iOS库冲突的问题---动态库导入

级别: 论坛版主
发帖
82
云币
191



1.什么是库?


首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。


什么时候我们会用到库?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间。


上面提到库在使用的时候需要 Link,Link 的方式有两种,静态和动态,于是便产生了静态库和动态库。


2.静态库和动态库的存在形式和区别


2.1 静态库和动态库的存在形式
静态库:.a 和 .framework
动态库:.dylib 和 .framework


2.2 静态库和动态库的区别

静态库:静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a)。之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了。
静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。


动态库:动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)。与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。


动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。同时,编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码。动态库带来的问题主要是,动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行(Linux 下喜闻乐见的 lib not found 错误)。


引用
注意:为避免冲突目前阿里视频云的端SDK都提供的是动态库



3.动态库导入
示例以短视频SDK导入为示例,其他播放器和连麦SDK可参考.
直接引入SDK的framework,名称为AliyunVideoSDKPro



引用
开发者打开工程,选中目标target, 依次选择"Build Phases"->"Link Binary With Libraries",点击"+"号,点击“Add Other...”,导入AliyunVideoSDKPro.framework和QuCore-ThirdParty.framework。
引用

开发者打开工程,选中目标target,依次选择"General"->"Embededed Binaries",点击"+"号,点击“Add Other...”,导入AliyunVideoSDKPro.framework和QuCore-ThirdParty.framework。

同时,还需依赖libz.tbd、ImageIO.framework、CoreMedia.framework、CoreVideo.framework,VideoToolBox.framework、MediaPlayer.framework、OpenAL.framework,libc++.tbd,libsqlit3.tbd,libiconv.tbd请一并加上。截图如下:






配置 Build Setting -- Linking -- Other Linker Flags 添加 -ObjC选项



发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个