3

我在我的应用程序中对 OpenSSL 的使用非常有限。基本上,我只是在做这两件事:

  1. RSA解密:用RSA_new、BN_bin2bn初始化RSA密钥,用RSA_private_decrypt进行RSA解密,释放密钥。
  2. AES 解密:使用 EVP__DecryptInit( ... EVP_aes_128_cbc )、EVP_DecryptUpdate 和 EVP_DecryptFinal。

就这样。尽管这种用法非常温和,但可执行文件大小超过 1MB,大约有 1,200 个不同的符号来自 OpenSSL 库。这些包括显然不在我的代码树中的函数,例如 ASN1_ 、 SHA1_、 EC_* 、 PKCS7 等。

我正在链接用于 iPhone Android 和 Windows 的 OpenSSL 静态库。在移动平台上,足迹是一个问题。我的链接器应该省略未引用的函数,因此这些符号似乎以某种方式被引用。

有没有办法采取更小的 OpenSSL 来减少可执行文件的大小?

你。

4

1 回答 1

0

OpenSSL 中的符号包括直接或间接引用的符号。如果链接器遗漏了某些内容(因为它是自动化工具并且可能会遗漏某些内容),那么您可以尝试以下操作:

  1. 使用您需要的唯一功能构建 OpenSSL。

这将使您了解您在 OpenSSL 中使用的依赖项。为此,请从您需要的顶级函数开始。您将获得所需功能的链接器错误。然后包括这些功能。经过几次迭代,您将获得最小的 OpenSSL 库。

当您需要使用其他功能时,这会产生严重的问题。

此外,您可以查看与优化相关的编译器选项,尤其是可执行文件大小。

于 2013-04-28T14:47:39.397 回答