【问题标题】:Dynamic/shared library loaded twice / RSA_check_key fails if libcrypto is loaded both statically and dynamically动态/共享库加载两次 / 如果 libcrypto 静态和动态加载,则 RSA_check_key 失败
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2021-04-09
      相关资源
      最近更新 更多