如果以静态和动态方式加载libcrypto,则加载动态/共享库两次/ RSA_check_key将失败

时间:2014-11-06 11:06:13

标签: c++ c linux gcc shared-libraries

原始问题:

我目前有一个程序可以动态加载两个共享库a.so和b.so.两个库都加载了libcrypto.so(OpenSSL)。如果程序结束,则有double free or corrupted error。我已经检查了我的程序是否有错误。索引在边界内,不使用动态内存。

对我而言,似乎libcrypto.so库在程序结束时分离了两次。有办法防止这种情况吗?优选地,不必使用不同的libssl实例,因为存储和存储器都在很近的范围内。

我正在使用Ubuntu 14.04 LTS,用C编写库,并使用带有-fpic的gcc编译它们。

感谢您的帮助!

PS:可能相关:Static library loaded twice

//编辑:如果a.so和b.so静态链接libssl,则会出现同样的问题。

///编辑:如果a.so静态链接并且b.so动态链接,则会出现同样的问题。 (首先使用a.so。)如果动态链接a.so并且静态地链接,则在RSA_check_key(..)上发生libcrypto错误。

答案

////编辑:我最多限度地减少了我的代码,发现我还在静态地连接两次。这引起了第一个问题

新问题:

如第二次编辑中所述,如果首先静态链接libcrypto然后动态链接,则RSA_check_key会失败。这里发生了什么想法?

1 个答案:

答案 0 :(得分:0)

返回了什么错误? 如果还没有这样做,请同时查看https://www.openssl.org/docs/crypto/RSA_check_key.html