OS X以及iOS平台上的的动态库导出c++接口类

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mac OS X 是苹果公司开发的一款操作系统,它是基于Unix的。相比于Windows操作系统,Mac OS X 具有许多独特的特性和功能。 首先,Mac OS X 有一个优雅和直观的用户界面,被认为是目前最美观的操作系统之一。其图标和风格具有一致性,给人一种整洁和高端的感觉。另外,Mac OS X 中的应用程序和窗口管理方式也十分灵活,用户可以通过多个桌面空间来组织和管理自己的工作区域。 其次,Mac OS X 是一个稳定且高效的操作系统。它采用了一种称为“内核级虚拟内存”的技术,可以将计算机的物理内存和硬盘空间结合起来使用,从而提供更高的性能和更好的系统稳定性。此外,Mac OS X 还针对图形和多媒体处理进行了优化,所以很适合专业人士和创意工作者使用。 另外,Mac OS X 还提供了许多方便的功能和工具。例如,Spotlight 搜索功能可以快速找到文件和应用程序,Time Machine 可以自动进行系统备份,Mission Control 可以方便地查看和切换不同应用程序和窗口等。这些功能使得用户在使用操作系统时更加高效和便捷。 此外,Mac OS X 还具有强大的安全性。它自带了防火墙和病毒扫描功能,而且在系统更新中定期修复已知的安全漏洞。这使得Mac OS X 成为一个非常可靠和安全的操作系统。 总而言之,Mac OS X 是一个功能强大、稳定且具有高端设计的操作系统。它提供了许多优秀的功能和工具,可以满足用户的个性化和专业化需求。无论是用于日常办公还是进行创意工作,Mac OS X 都可以为用户提供出色的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值