如何防止从静态链接库中导出符号?

5
我在Linux x86上创建了一个共享库。在创建它时,我已经静态链接了openssl。但是openssl仅在内部使用,然而我发现openssl符号已被导出。这会对其他需要我的库和openssl的库造成问题,因为在运行时可能会加载错误的符号。有没有办法在将openssl静态链接到我的共享库中时防止所有openssl符号被导出?
谢谢, Mike
1个回答

0

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

我认为如果openssl已经声明了一些符号extern,您可以使用编译指示强制隐藏符号。

还有其他选项可用。请查看gcc文档中的fvisibility部分,以获取有关可用选项的完整说明。


2
你确定这个可行吗?我的印象是可见性只适用于DSO(动态共享对象)中的符号。不清楚OP是否将静态OpenSSL链接到动态共享库,但我认为你的策略在这种情况下会起作用。但如果OP正在创建一个静态库,那么可见性属性可能不适用。不过,发现不同的结果会很好! - Chris Cleeland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接