我在Linux x86上创build了一个共享库。 在创build它,我已经静态链接在openssl。 OpenSSL只在内部使用,但我看到openssl符号已被导出。 这对于需要我的库和openssl的其他库会造成问题,因为错误的符号可以在运行时加载。 有没有办法阻止所有的openssl符号被导出,当我静态链接到我的共享库?
谢谢,迈克
架构上,共享对象(SO)和dynamic链接库(DLL)之间有什么区别?
ld找不到-l <库>
无法从可执行共享库中输出浮点数
如何在Linux上使用GDBdebuggingJava -JNI?
编译libstdc ++版本与系统版本
假设你使用的是gcc,当链接你的库时,设置-fvisibility = hidden并且在你的库源代码中,把所有你希望可见的函数标记为extern。 我认为这应该工作,只要openssl没有宣布自己的功能extern。
我认为,如果openssl已经声明了一些符号extern,你可以手动强制符号隐藏与编译指示。
还有其他的选择。 检查fvisibility部分中的gcc文档,以获取可用的完整说明。