dynamic/共享库加载两次/ RSA_check_key失败,如果libcrypto加载静态和dynamic

原始问题:

我目前有一个程序,dynamic加载两个共享库a.so和b.so。 这两个库加载libcrypto.so(OpenSSL)。 如果程序结束,则会出现double free or corrupted error 。 我已经检查了我的程序错误。 索引处于界限内,并且不使用dynamic内存。

在我看来,libcrypto.so库在程序结束时分离了两次。 有没有办法来防止这一点? 优选地,不必使用不同的libssl实例,因为存储和内存在相近的范围内。

我使用Ubuntu 14.04 LTS,在C中编写了这些库,并使用gcc和-fpic编译它们。

谢谢你的帮助!

PS:可能相关: 静态库加载两次

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

///编辑:如果a.so静态链接和b.so链接dynamic相同的问题发生。 (首先使用a.so。)如果a.so是dynamic链接的,而b.so是静态链接的,则RSA_check_key(..)会发生libcrypto错误。

回答

////编辑:我最小化了我的代码,发现我另外连接了两次静态的东西。 这造成了第一个问题

新问题:

如第二次编辑所述,如果libcrypto先静态链接,然后dynamic链接,则RSA_check_key会失败。 任何想法发生在这里?

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