原始问题:
我目前有一个程序可以动态加载两个共享库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