原始问题:
我目前有一个程序可以动态加载两个共享库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会失败。这里发生了什么想法?