【问题标题】:imposing library loading order强加图书馆加载顺序
【发布时间】:2009-12-07 11:28:34
【问题描述】:

我有一个 gcc 编译的应用程序链接到动态库。有没有办法强制加载库的顺序? (在我的情况下,一个库构造函数使用由其他库构造函数设置的资源)。

谢谢。

【问题讨论】:

    标签: gcc shared-libraries


    【解决方案1】:

    gcc 不负责加载库,ld.so 会在您的程序加载时自动加载,或者您按照 @jldupont 的建议手动加载。

    ld.so 可能会故意使用randomise 来防止return-to-stdlib 攻击。

    所以要么:

    1. 自行加载库。
    2. 或者删除库加载脚本之间的依赖关系。
    3. 使库本身包含依赖项(可能有效,也可能无效) 那就是当您要链接每个共享库时,请确保它在链接命令中包含-l<dependentlib>。您可以通过创建一个仅与该共享库链接的简单程序来测试这一点 - 如果它构建并运行,则该库包含所有必要的依赖库。如果 ld.so 按依赖顺序加载库,这可能会有所帮助 - 我认为它必须这样做。

    【讨论】:

    • 我如何“使库本身包含依赖项”?
    • @Jack - 编辑了我的答案 - 基本上在链接库时确保链接所有依赖库。
    【解决方案2】:

    您可以使用dlopen 并自己加载库:这样,您可以对加载/卸载过程进行更精细的控制。见here

    当然,这不是基于“gcc”的解决方案,它需要重新设计您的应用程序......也许您可以更详细地解释您面临的“问题”?

    如果我的解决方案不符合您的需求,您可以忽略它。干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2014-10-29
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多