【问题标题】:Is it possible to prevent function override in a C shared library?是否可以防止 C 共享库中的函数覆盖?
【发布时间】:2022-01-09 03:45:58
【问题描述】:

我正在使用 GCC 在 C 语言的 Linux 上开发一个共享库。我注意到共享库中的任何函数都可以通过在主应用程序中重新定义来覆盖。有没有办法防止特定函数在共享库中被覆盖?

【问题讨论】:

    标签: c linux gcc overriding shared-libraries


    【解决方案1】:

    如果您不需要将该功能导出到世界,请将其设为static

    static void a() {
    }
    void b() {
        a();
    }
    

    主应用程序将无法直接调用a,但也许你不需要。

    如果您还想将该功能导出到世界,您可以这样做:

    static void real_a() {
       /* the actual implementation */
    }
    void a() { /* wrapper for export */
        real_a();
    }
    void b() { /* your library code has to call the real function */
        ...
        real_a();
    }
    

    主应用程序仍然可以覆盖a,但这不会影响库代码,它在内部调用real_a

    【讨论】:

    • 这是有道理的。谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2012-11-03
    • 2012-07-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2017-05-29
    相关资源
    最近更新 更多