【问题标题】:Difference between shareable and non-shareable libraries for linking用于链接的可共享和不可共享库之间的区别
【发布时间】:2014-03-16 07:42:31
【问题描述】:

目前我正在集群上安装MPICH。对于configure,有一个参数--enable-shared,“在构建MPICH 时创建共享库”(installation manual,第 9 页)。这仅作为示例,我的问题与 MPICH 无关:“可共享”和“不可共享”库之间有区别吗?

到目前为止,我认为只有不同的方式来集成库(静态、动态、后期链接),但是

  • 还有不同的库类型吗?
  • 如果是,有什么区别,尤其是技术上的区别?不可共享库是否以不同方式编译或包含较少功能?
  • 如果不是,MPICH 安装手册条目是什么?

谢谢!

【问题讨论】:

    标签: compiler-construction linker configure


    【解决方案1】:

    “可共享”和“不可共享”库之间有区别

    是的:共享库可以在使用它们的不同可执行文件之间共享。

    存档库(与共享相反),只能在您使用同一可执行文件的多个实例时共享,但不能在不同的可执行文件之间共享。

    编辑:

    使用共享库有什么缺点

    有几个:

    • 调用共享库以及库内的调用和全局数据访问稍慢(通常为 1-2%,但在极端情况下可能为 10%)。有mitigation techniques,但也不是微不足道的。
    • 使用共享库需要您将主可执行文件所有它需要的共享库(以及这些共享库的正确版本)发送到目标系统.一旦图书馆的数量接近 100 个,这可能会成为一个严重的问题。
    • 当您的开发系统上的共享库版本与您的生产/集群/客户系统上的版本不匹配时,使用共享库为“DLL hell”和各种奇怪的错误打开了大门。

    【讨论】:

    • 感谢您的回答!使用可共享库有缺点吗?否则,非共享库的理由是什么?
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2012-10-29
    • 2013-11-27
    • 2021-07-25
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多