C++ 加密的子集++;移动应用程序库(iOS、Android)

C++ 加密的子集++;移动应用程序库(iOS、Android),c++,ios,android-ndk,crypto++,C++,Ios,Android Ndk,Crypto++,我需要为Android和iPhone项目中使用的跨平台库使用一些RSA签名方案。环顾四周后,我选择了cryptopp,但它对于静态链接来说太大了。因此,我在项目中添加了源代码和标题,以便只将相关部分链接到我的库中。它仍在向最终库添加一些MB的发布版本 是否有更简单或更有效的方法来降低库或cryptopp的大小 我不太熟悉编译过程中的模板生成。但我记得模板可以添加相当多的代码。有没有办法停止/改进此功能(编译器选项?) 如果我想从项目中手动删除我的简单用例未使用的所有源/头文件,有什么工具可以帮助

我需要为Android和iPhone项目中使用的跨平台库使用一些RSA签名方案。环顾四周后,我选择了cryptopp,但它对于静态链接来说太大了。因此,我在项目中添加了源代码和标题,以便只将相关部分链接到我的库中。它仍在向最终库添加一些MB的发布版本

  • 是否有更简单或更有效的方法来降低库或cryptopp的大小

  • 我不太熟悉编译过程中的模板生成。但我记得模板可以添加相当多的代码。有没有办法停止/改进此功能(编译器选项?)

  • 如果我想从项目中手动删除我的简单用例未使用的所有源/头文件,有什么工具可以帮助我吗?使用cryptopp模板挖掘cryptopp需要相当长的时间,我一直支持自动处理;)


  • 非常感谢您的帮助

    如果你想使用crypto++(有很多很好的理由),这可能是一个让链接器完成他们的工作的最佳方案。不久前我就开始担心这一点了,我用手做的事情比优化链接器做的更好

    我通过清理我的旧测试应用程序来确认这一点,该应用程序使用crypto++生成新的随机RSA密钥,对字符串签名并验证该字符串。以下是我看到的数字:

    • libcryptopp.a-crypto++是为发布而构建的,它是一个静态库,在iOSSDK5.0上使用clang++实现的。没有专门的attmept来最小化大小,只是用-fvisibility=hidden-fvisibility内联线hidden和-Os:22.5MB构建

    • 默认iOS单视图模板中的空应用程序,使用-Os:34KB构建

    • 添加了“自检”代码的同一个空应用程序生成一个密钥对,使用RSA/SHA256对字符串进行签名(因此散列),对其进行十六进制编码,打印签名,解码签名,并验证原始字符串上的签名,该原始字符串使用-Os根据上面我的第一个项目符号libcryptopp.a构建:389KB

    链接器似乎在这里做得很好。如果您看到的是完全不同的东西,请确保您真正看到的是发行版二进制文件

    RSA签名。。。在Android和iPhone项目中。环顾四周后,我选择了cryptopp

    相关(来自Crypto++wiki):和

    是否有更简单或更有效的方法来降低库或cryptopp的大小

    不需要。iOS上的编译器和libtool无法告诉您可能需要(或不需要)什么,因此您可以获得归档中的所有内容。Android上提供的GNU工具也是如此

    我不太熟悉编译过程中的模板生成。但我记得模板可以添加相当多的代码。有没有办法停止/改进此功能(编译器选项?)

    不容易。但是您可以浏览源代码并提取显式模板实例化。您想查找使用
    加密PP\u DLL\u TEMPLATE\u类实例化的对象
    。您可以在中看到它是如何定义的

    但我不担心它,因为您可以让链接器从静态库中丢弃大部分(或全部?)未使用的代码

    如果我想从项目中手动删除我的简单用例未使用的所有源/头文件,有什么工具可以帮助我吗

    不,我不知道有什么工具可以做到这一点(类似于Boost的
    bcp
    )。我曾经尝试过,但在挫折中放弃了

    您没有问的问题:当链接到Crypto++的静态版本时,如何减少最终二进制文件的大小。以下是答案:

    • 两者

      • 修改
        GNUmakefile

      • cxflags+=-Os

      • cxflags+=-f功能部分-fdata部分

    • iOS

      • 修改
        GNUmakefile

      • cxflags+=-gfull

      • LDFLAGS+=-dead\u strip

    • 安卓

      • cxflags+=-Wl,--exclude libs,ALL

      • 运行带有
        --strip debug
        --strip多余的
        --strip所有的
        的arm linux AndroidABI strip

    这两种技术都包含在Wiki页面中。如果您在Linux上工作,那么还有另一个wiki页面,介绍如何减少大小和剥离

    有关更多信息,请参阅(适用于iOS)和(适用于Android和Linux)