【问题标题】:How do I prevent export of symbols from statically linked library?如何防止从静态链接库中导出符号?
【发布时间】:2011-02-05 10:49:38
【问题描述】:

我在 linux x86 上创建了一个共享库。在创建它时,我在 openssl 中进行了静态链接。 OpenSSL 仅在内部使用,但我看到 openssl 符号已被导出。这会导致需要我的库和 openssl 的其他库出现问题,因为可以在运行时加载错误的符号。当我将它静态链接到我的共享库时,有没有办法阻止所有 openssl 符号被导出?

谢谢, 迈克

【问题讨论】:

    标签: linux shared-libraries static-libraries static-linking


    【解决方案1】:

    假设您使用 gcc,在链接您的库时,设置 -fvisibility=hidden 并在您的库源代码中,将您希望可见的所有函数标记为 extern。我认为只要 openssl 没有声明自己的外部函数,这应该可以工作。

    我认为如果 openssl 已经声明了一些外部符号,您可以手动强制符号用 pragma 隐藏。

    还有其他选项。查看 fvisibility 部分中的 gcc 文档,了解对您可用的内容的完整说明。

    【讨论】:

    • 你确定这有效吗?我留下的印象是可见性仅适用于 DSO(动态共享对象)中的符号。目前尚不清楚 OP 是否将静态 OpenSSL 链接到动态共享库,但我认为您的策略在这种情况下会起作用。但是,如果 OP 正在创建一个静态库,我认为可见性属性不适用。不过,如果能有不同的发现就好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多