C++ 加密的子集++;移动应用程序库(iOS、Android)
我需要为Android和iPhone项目中使用的跨平台库使用一些RSA签名方案。环顾四周后,我选择了cryptopp,但它对于静态链接来说太大了。因此,我在项目中添加了源代码和标题,以便只将相关部分链接到我的库中。它仍在向最终库添加一些MB的发布版本C++ 加密的子集++;移动应用程序库(iOS、Android),c++,ios,android-ndk,crypto++,C++,Ios,Android Ndk,Crypto++,我需要为Android和iPhone项目中使用的跨平台库使用一些RSA签名方案。环顾四周后,我选择了cryptopp,但它对于静态链接来说太大了。因此,我在项目中添加了源代码和标题,以便只将相关部分链接到我的库中。它仍在向最终库添加一些MB的发布版本 是否有更简单或更有效的方法来降低库或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
加密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