【发布时间】:2014-11-06 11:06:13
【问题描述】:
原问题:
我目前有一个程序可以动态加载两个共享库 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是动态链接,b.so是静态链接,在RSA_check_key(..)会出现libcrypto错误。
回答
//// 编辑:我进一步最小化了我的代码,发现我另外静态链接了两次。这导致了第一个问题
新问题:
如第二次编辑中所述,如果 libcrypto 先静态链接然后动态链接,则 RSA_check_key 失败。有什么想法吗?
【问题讨论】:
标签: c++ c linux gcc shared-libraries