OS X以及iOS平台上的的动态库导出c++接口类
来源:互联网 发布:网管软件限制 编辑:程序博客网 时间:2024/04/26 20:58
c/c++语言写的动态库可以导出classes以及functions。
下面是一些重要的知识:
1:
gcc编译器生成的动态库中的classes和functions默认都是导出的,而微软的vc的编译器必须针对classes和functions显式的使用 __declspec(export) 才能让classes和functions被导出。
这个知识对于在Linux、OS X、iOS平台上做开发是有帮助的。
2:
如果把动态库的不必要的symbols也导出的坏处是会影响app的加载的速度。
3,
在OS X、iOS上,可以通过修改编译器选项,让symbols hidden by default,然后想要导出的symbols再用 __attribute__ (( visibility("default")))。
这个表示默认所有的classes和functions不是导出的了,而用visibility指定的符号才是导出的。
4:
c++ classes的虚函数的特殊之处:
即使一个class并没有被导出,但它的虚函数也仍然能够被动态库的client调用:如果client能够从动态库得到一个该class的实例(可以通过一个被导出的function返回),那么client就能够调用它的这个虚函数。
这是因为虚函数并不需要在编译链接期间进行链接,它是运行期间通过对象实例所指向的虚函数指针表来动态寻址的。
5:
我们团队开发的多媒体引擎给app的接口设计时就利用了这个特性:提供了一组导出的functions(通过设定visibility为default),由function创建并返回给client一些抽象类的实例,这些抽象类全部定义的纯虚函数,抽象类并不需要导出(这就是利用了上文中提到的特性),另一方面,client也不需要知道具体的实现类,只需要知道抽象类的定义即可(这样的好处是面向接口编程)。
0 0
- OS X以及iOS平台上的的动态库导出c++接口类
- Mac OS X上使用XCode编译调用OS X的动态库
- Mac OS X 平台上的开发利器---XCode
- IntelliJ Idea在OS X平台上的缓存优化
- OS X平台的Dylib劫持技术(上)
- 《Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》读书笔记(上)
- Windows 上的倒斜杠以及 OS X 和 Linux 上的正斜杠
- Mac OS X下的动态链接库
- Mac OS X下的动态链接库
- iOS 5与Mac OS X Lion平台的技术展望
- 如何将你的Sprite Kit游戏从ios移植到Mac OS X平台
- 升级Mac OS X上的git
- OS X以及iOS中与硬件环境相关的预定义宏
- OS X与iOS的区别
- 编写高质量iOS与OS X代码的52个有效方法上
- 从Windows的角度看Mac OS X上的软件开发兼谈跨平台开发的一些可行方向
- Node.app让Nodejs平台在iOS和OS X系统上奔跑
- ffmpeg导致动态库无法导出接口的解决办法
- UVa 232 - Crossword Answers
- XTU1238:Segment Tree(线段树)
- poj 1721 CARDS 【置换群 】【求最小循环节 再由末序列 求 初序列】
- Java学习【网络编程】
- hihocoder #1175 : 拓扑排序·二
- OS X以及iOS平台上的的动态库导出c++接口类
- Java命名规范
- Linux内核与驱动开发学习总结:PCI中线初始化(十一)
- ACM/ICPC World Finals 2013 A Self-Assembly
- zookeeper作为注册中心,使用dubbo
- JSON初步
- FaceBook/infer-InferPrint命令
- 面对我的恐惧——当务之急
- Integer to Roman