以下是个人在做加密算法库时一些经验总结,今天把它写下来分享给大家,希望对大家以后再做类似的开发工作时能有所帮助,少走些弯路。
主要从以下5个方面进行阐述:
1. Openssl安装,1.0.1与1.0.2使用时的区别
2. Linux下gcc的使用方法,及可能遇到的问题
3. JNI开发,开发流程
4. NDK使用方法,以及打包so库时如何编写Application.mk文件
5.IOS打包基于openssl库的静态库时需注意那些
一. Openssl安装,1.0.1与1.0.2使用时的区别
参考网上的教程:
① 到openssl官网下载openssl包openssl-1.0.1e.tar.gz
② 使用tar命令将其解压到/usr/local/src下
③ Cd进入openssl-1.0.1e目录下,执行
./config --prefix=/usr/local --openssldir=/usr/local/ssl
make && make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && make install
以上方法是我从网上copy下来的,若自己的机器上没有openssl,可以参考安装。
查看自己机器上是否已经安装openssl的方法,执行openssl version,若有版本信息则已安装,否则未安装。
在使用Openssl库开发时,需要注意1.0.1和1.0.2中有些方法的参数是不同的。例如1.0.1的bio.h中有个方法BIO *BIO_new_mem_buf(void *buf, int len),而其在1.0.2中则是BIO *BIO_new_mem_buf(const void *buf, int len)。所以在打包时要注意,开发环境和打包环境中的库是不是同一个版本,若不是需要在调用某些方法时稍作改动,一般使用指针类型强转下就可以解决。
二. Linux下gcc的使用方法,及可能遇到的问题
gcc主要是用来编译.c文件,编译.cpp文件可以使用g++。先介绍下一般会用到的几个命令参数:
-o指定输出文件名
-c只编译不连接
-g产生供gdb调试用的可执行文件
-l链接库,后跟库名,linux下的库名一般是lib+库名+.so形式
-L指定连接库路径
-I指定include文件路径
-fPIC在编译阶段使用,告诉编译器产生与位置无关代码,一般在编译动态共享库用到。
-shared设置共享,一般是在编译动态共享库时会用到。
用例:hello.c
编译成可执行文件:gcc hello.c –o main,这要求hello.c