前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >The Missing Link

The Missing Link

作者头像
Seven Du
发布2020-12-21 11:30:12
1.6K0
发布2020-12-21 11:30:12
举报

??

静态链接还是动态链接?在这一点上,FreeSWITCH是怎么做的?接下来我想跟大家讨论一下这个问题。

曾经,有个叫Roman Shaposhnik的哥们发了一篇博客,上面讲到,在一个理想的世界中,所有的库都应该是动态链接的,这样可以最大限度的节约磁盘空间和内存,程序也更有效率,少出Bug,原文见这里:https://blogs.oracle.com/rvs/entry/what_does_dynamic_linking_and

但是,FreeSWITCH的作者Anthony Minessale却有不同的话说,该文章来自 http://www.freeswitch.org/node/56 ,读者也可以点击左下角的「阅读原文」查看。

原文翻译如下:

最近,我读了Roman Shaposhnik的博客文章,是关于静态连接的:https://blogs.oracle.com/rvs/entry/what_does_dynamic_linking_and 。

作为FreeSWITCH阵营的代表,我想,我应该说点什么。

对于整个问题,我可以提供一个完全不同的视角。我们的项目(FreeSWITCH)我很多我们自己的代码,同时也有一系列的依赖库,这些依赖库大多数在一些外部模块中使用。现在,Roman在它的文章中说,在一个**理想**的世界里,应该只有一个操作系统,并且只有一个唯一实体管理着相同的环境。为了能在你的系统上运行我们的软件,我只需要向该实体请求我需要的环境,包括我们的软件依赖的各种程序库。

我们遇到两个主要问题。一是我们的目标是跨平台的,而“跨平台”在我们心目中的含义是它能尽可能地运行在任何操作系统以及任何硬件上。实际上,这本身就是个恶梦。与Roman所描述的理想世界相反,由于这个世界上有Windows、Mac OS X,数十种Linux发行版、以及Solaris等各种不同的操作系统,它们又各有不同的要求,将这个世界带入极端的无政府主义的混乱状态。当我试图在任何一种平台上编译我们的软件时,我必然会遇到**问题**。令人痛苦的事实是,所有这些平台或厂商的维护者以及我们所依赖的库的开发者们都没有像我们一样想让快一点使所有东西都完美无缺。我甚至怀疑他们是否跟我们一样对“跨平台”支持执着。这让我想到第二个问题——即使我们非常幸运地在某个平台上找到了我们依赖的库,我们又如何知道它是按我们所需的方式配置(configured)的呢?很多软件包都有数十种编译时的配置参数,其中有很多参数是我们必须的,或者说,少了某些参数我们的软件也就无法实现某些功能,这不是我们愿意见到的。另外,为了在所有不同的系统上礼貌地要求我们所需的依赖,我们应该如何打包我们的软件呢?只有一种选择,那就是,我们必须维护我们自己依赖的代码并编译我们所需要的版本的库。这么做也是因为我们并不想野蛮的将我们版本的库装到某人的系统上,并且,我们也绝对不想安装动态库,那样做通常会引起混乱(应用程序可能会找到错误的动态库)。所以,我们只是简单的将我们依赖的代码编译成静态库,并静态的连接到我们的可加载模块或我们的代码中而不会影响到别人。通过静态编译和连接,我们知道我们在运行时所用的代码就是我们开发时同样的代码,因此我们也能睡的安稳。所有这些决定跟运行效率或节约磁盘空间、节省内存等没有半毛钱关系,我的想法很简单,我就是想让我的软件能正常地运行。

必须指出,我们确实曾花了一些时间去研究是否有这样的代码存在——它是众所周知的、容易安装的或通常都是已经在操作系统上默认安装的。如果有这样的软件存在的话,并且我们能在所有目标系统上进行测试确认没有问题的话,我们是非常愿意用这样的系统提供的库的。这么说吧,迄今为止,似乎只有一个库符合这个标准,那就是ODBC。它能入选的原因是它有一个定义很好的而且永久不变的二进制的API以及无数的实现。

-------- 华丽的分隔线 ----------

翻译完毕,在后面的文章中我们还会继续探讨在最新版的FreeSWITCH中是怎么做的。晚安。

----------------------------------------

FreeSWITCH-CN是什么?

----------------------------------------

FreeSWITCH-CN是FreeSWITCH中文社区,我们的官方网站是 http://www.freeswitch.org.cn 。FreeSWITCH-CN同时也是一个微信公共账号,可以通过点击本页最顶端的「FreeSWITCH中文社... 」,或在通迅录->订阅号中搜索「FreeSWITCH-CN」来订阅,也可以到官方网站上扫描二维码。当然,不管是新用户还是老用户,随时都可以输入m或1显示本账号的主菜单。FreeSWITCH-CN的账号维护者是Seven Du,在此,他会分享多年的FreeSWITCH使用经验,分享一些对开源VoIP软件以及软件社区的思考,并隔三差五的解答一些粉丝关心的问题。Seven Du于2007年听说、2008年开始使用FreeSWITCH,2009年创办FreeSWITCH-CN中文社区,2011~2013连续三年参加了在美国芝加哥举办的ClueCon全球VoIP开发者大会,该会议是由FreeSWITCH核心团队主办的。如果你在学习和使用FreeSWITCH的过程中,有什么有趣的故事,也欢迎与我分享。移动设备上打字不方便,如果想写长的留言可以发邮件到 wechat@freeswitch.org.cn 。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-05-05,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com