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



原始问题:

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

在我看来,libcrypto.so库在程序结束时被分离了两次。有办法防止这种情况发生吗?最好不必使用不同的libssl实例,因为存储和内存都在严格限制范围内。

我使用Ubuntu 14.04 LTS,用C编写库,并使用gcc和-fpic进行编译。

谢谢你的帮助!

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

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

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

回答

////编辑:我更多地最小化了我的代码,发现我额外地静态链接了一些东西两次。这导致了的第一个问题

新问题:

如第二次编辑中所述,如果先静态链接libcrypto,然后动态链接,RSA_check_key将失败。你知道这里发生了什么吗?

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

最新更新