【视频云端】iOS库冲突的问题---动态库导入-阿里云开发者社区

开发者社区> 徳胜> 正文

【视频云端】iOS库冲突的问题---动态库导入

简介: 1.什么是库 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。
+关注继续查看

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

  1. 开发者打开工程,选中目标target,依次选择"Build Phases"->"Link Binary With Libraries",点击"+"号,点击“Add Other...”,导入AliyunVideoSDKPro.frameworkQuCore-ThirdParty.framework
  2. 开发者打开工程,选中目标target,依次选择"General"->"Embededed Binaries",点击"+"号,点击“Add Other...”,导入AliyunVideoSDKPro.frameworkQuCore-ThirdParty.framework
  3. 同时,还需依赖libz.tbdImageIO.frameworkCoreMedia.frameworkCoreVideo.frameworkVideoToolBox.frameworkMediaPlayer.frameworkOpenAL.frameworklibc++.tbd,libsqlit3.tbd,libiconv.tbd请一并加上。截图如下:

依赖库示例

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
生成lua的静态库.动态库.lua.exe和luac.exe
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 “lua: attempt to yield across metamethod/C-call boundary”的错误(据悉主线程中调用yield也会如此)。
858 0
Xcode3创建和使用iOS的dylib动态库
此文真正写于2011年4月,当时是xcode3.X版本。xcode4的路径会不同,方法请查看 Xcode4.6创建和使用iOS的dylib动态库。 文中提到的压缩文件在此下载http://download.
1086 0
《iOS9开发快速入门》——导读
本节书摘来自异步社区《iOS9开发快速入门》一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区“异步社区”公众号查看
1424 0
深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题
注意:编译器为gcc,若使用g++,请在库里面加上extern “C”    两个静态库    首先测试静态链接库,大概的代码如下:    liba.c #include   #include   #include "libA.
1682 0
解决Jquery与Shopex调用的mootools冲突问题
在%thems%/block/header.html 里面的""标签前加入以下代码 jQuery.noConflict(); 这步是关键,在前面,加入以上代码。然后把使用jquery里面的所有$都替换为jQuery就行了(替换选择器)。
632 0
GCC同时使用静态库和动态库链接
一 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。
783 0
TiDB 源码学习:关于 Projection Pruning 的细节问题
查询优化器发现节点之间是 Proj/Aggr --> Proj 模式的时候(也就是某个 Proj 节点的祖先是 Proj或 Aggr 节点的时候),会考虑对子节点做 Projection Pruning 优化。 是否可以消除 Proj 节点的判断依据是:当前的 Proj 节点输出的列是否和其子节点的输出列一样。如果一样,则可以消除。 让我产生疑问的地方是判断输出列是否和子节点一样的代码逻辑,代码如下: func canProjectionBeEliminatedLoose(p *LogicalProjection) bool { for _, expr := range p.Ex
8 0
2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置
通过对市场中各厂商进行系统的评估,我们能够看到阿里云凭借绝对领先的市场份额和完整的产品线位居市场竞争力领导者的位置
4592 0
Java调用C/C++实现的DLL动态库——JNI
由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅: 采用的方法是JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互。
827 0
阿里视频云web播放器常见问题汇总
1. 如何正确选择播放器 Aliplayer播放器包含H5、Flash、自适应播放器,建议用户选择自适应播放器,可以根据终端类型、浏览器类型和地址协议选择最合适的播放器。 如果是加密播放只能选择Flash播放器,H5现在还不支持加密播放。
15332 0
+关注
徳胜
专注于音视频云服务和基础业务架构,对视频云服务有一定理解.
29
文章
3
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载