cross compile openssl
2016-06-08 00:00
344 查看
最近的项目需求中依赖libcrypto和libssl库,所以需要编译安装openssl0.9.8e,花了差不多一天的时间终于成功安装和裁剪,现在总结并分享个人的方法,贴出来供大家参考和指正。
方法如下(不同的平台要根据实际环境更改相应的编译工具):
一、配置:
./config no-asmshared--prefix=/repo/root/TEST_PACKAGES/robot/PACKAGES
说明:no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程。
shared 生成动态链接库。
--prefix 指定生成lib include bin目录的路径,不修改此项则默认为OPENSSLDIR目录。
二、 修改Makefile:
(这些修改也可以在config配置中使用相应参数来更改,具体怎么做请自己查相应资料,我是直接修改Makefile的)
在Makefile中找到相应参数,其后面的内容修改如下:
1、 PLATFORM=(mips) //注意修改此值为你产品硬件平台,如arm、mips等等,我所使用的平台为mips,我使用的是mips平台编译工具。
2、把所有的 –march=pentium 去掉(三处)。
3、指定所使用的编译工具:(下面配置要严格一致,否则make会报错)
说明:
1、此处的mipsel-linux-gcc为交叉编译工具,根据实际情况更改为你自己平台下的编译工具即可,比如:arm-linux-gcc。注意AR和RANLIB也要作相应修改。
2、不同平台的编译器编译出来的库文件大小可能不一样。(我要两种平台下编译出来的库文件相差0.5M的大小)。
三、make
四、make install
以上操作成功后会在你指定的目录下生成四个文件夹,在其中的lib目录下可找到所需要的 XXX.so动态库文件。
五、裁剪
在嵌入式平台上,如果使用openssl的标准方法,编译出来的libcrypto.so和libssl.so会比较大,大约为2.1M多和436K,为了节省空间,可以使用如下方法进行裁剪:
1、静态库:
./config--prefix=/home/zqjun/openssl5350 no-shared no-zlib no-asm no-threads no-sse2no-compno-dso no-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipherno-md2 no-md4 no-mdc2 no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdhno-store no-ripemd no-des no-rc4 no-bf no-cast no-dsa no-dh no-ssl no-ssl2no-ssl3 no-tls no-perlasm
2、动态库:
.config--prefic=/home/zqjun/openssl5350 shared no-zlib no-asm no-threads no-sse2 no-compno-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipher no-md2 no-md4 no-mdc2no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdh no-store no-ripemd no-des no-rc4no-bf no-cast no-dsa no-dh no-ssl no-ssl2 no-ssl3 no-tls no-perlasm
注意:
1、动态编译时不能出现no-dso参数,因为编译过程中有些函数需要链接相应动态库。
2、编译完成后使用XXX-strip把相应的符号去掉,安装后的库会更小一些。
创建出Makefile后,再按照上面编译时的修改方法修改makefile中相应的参数值就可以了。
注意事项:
1、在linux上用make编译或用make install重新安装之前最好先用makeclean清除上一次安装所生成的所有的文件,以免因之前的错误遗留的文件导致编译安装不成功。
2、注意引用库的顺序为:-lssl -lcrypto,如果为-lcrypto –lssl,编译时会出现错误。
3、openssl所涉及到的算法介绍见博客:
http://blog.csdn.net/guoliquan1/article/details/4703315
4、参考书箱和文档:《Openss安装指南》《OpenSSL使用指南》。
方法如下(不同的平台要根据实际环境更改相应的编译工具):
一、配置:
./config no-asmshared--prefix=/repo/root/TEST_PACKAGES/robot/PACKAGES
说明:no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程。
shared 生成动态链接库。
--prefix 指定生成lib include bin目录的路径,不修改此项则默认为OPENSSLDIR目录。
二、 修改Makefile:
(这些修改也可以在config配置中使用相应参数来更改,具体怎么做请自己查相应资料,我是直接修改Makefile的)
在Makefile中找到相应参数,其后面的内容修改如下:
1、 PLATFORM=(mips) //注意修改此值为你产品硬件平台,如arm、mips等等,我所使用的平台为mips,我使用的是mips平台编译工具。
2、把所有的 –march=pentium 去掉(三处)。
3、指定所使用的编译工具:(下面配置要严格一致,否则make会报错)
[code=language-bash]CC= mipsel-linux-gcc #CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized -DSHA1_ASM -DMD5_ASM -DRMD160_ASM CFLAG= -fPIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall DEPFLAG= PEX_LIBS= EX_LIBS= -ldl EXE_EXT= ARFLAGS= PERL= /usr/bin/perl AR=mipsel-linux-ar $(ARFLAGS) r RANLIB= mipsel-linux-ranlib TAR= tar TARFLAGS= --no-recursion MAKEDEPPROG= gcc
说明:
1、此处的mipsel-linux-gcc为交叉编译工具,根据实际情况更改为你自己平台下的编译工具即可,比如:arm-linux-gcc。注意AR和RANLIB也要作相应修改。
2、不同平台的编译器编译出来的库文件大小可能不一样。(我要两种平台下编译出来的库文件相差0.5M的大小)。
[code=language-bash]export PATH=$PATH:/home/charles/code/cross-compile/embedded-toolchain/tool-chain/bin export LD_LIBRARY_PATH=/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/mpc-0.8.1/lib
三、make
四、make install
以上操作成功后会在你指定的目录下生成四个文件夹,在其中的lib目录下可找到所需要的 XXX.so动态库文件。
[code=language-bash]//check the result # ls -l /repo/root/TEST_PACKAGES/robot/PACKAGES/lib | grep crypto -rw-r--r-- 1 root root 3387284 Jun 8 20:20 libcrypto.a lrwxrwxrwx 1 root root 18 Jun 8 20:20 libcrypto.so -> libcrypto.so.1.0.0 -r-xr-xr-x 1 root root 2225683 Jun 8 20:20 libcrypto.so.1.0.0 # ldd /repo/root/TEST_PACKAGES/robot/PACKAGES/lib/libcrypto.so.1.0.0 not a dynamic executable # ldd /repo/root/TEST_PACKAGES/robot/PACKAGES/lib/libcrypto.so not a dynamic executable
[code=language-bash]//check # export LD_LIBRARY_PATH=/repo/root/TEST_PACKAGES/robot/PACKAGES/lib # /repo/root/TEST_PACKAGES/robot/PACKAGES/bin/python Python 2.7.11 (default, May 25 2016, 07:17:40) [GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> import ssl >>> import _hashlib >>> import hashlib >>>
五、裁剪
在嵌入式平台上,如果使用openssl的标准方法,编译出来的libcrypto.so和libssl.so会比较大,大约为2.1M多和436K,为了节省空间,可以使用如下方法进行裁剪:
1、静态库:
./config--prefix=/home/zqjun/openssl5350 no-shared no-zlib no-asm no-threads no-sse2no-compno-dso no-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipherno-md2 no-md4 no-mdc2 no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdhno-store no-ripemd no-des no-rc4 no-bf no-cast no-dsa no-dh no-ssl no-ssl2no-ssl3 no-tls no-perlasm
2、动态库:
.config--prefic=/home/zqjun/openssl5350 shared no-zlib no-asm no-threads no-sse2 no-compno-gmp no-rfc3779 no-krb5 no-rc5 no-zlib-dynamic no-hw no-cipher no-md2 no-md4 no-mdc2no-rc2 no-idea no-camellia no-ec no-ecdsa no-ecdh no-store no-ripemd no-des no-rc4no-bf no-cast no-dsa no-dh no-ssl no-ssl2 no-ssl3 no-tls no-perlasm
注意:
1、动态编译时不能出现no-dso参数,因为编译过程中有些函数需要链接相应动态库。
2、编译完成后使用XXX-strip把相应的符号去掉,安装后的库会更小一些。
创建出Makefile后,再按照上面编译时的修改方法修改makefile中相应的参数值就可以了。
注意事项:
1、在linux上用make编译或用make install重新安装之前最好先用makeclean清除上一次安装所生成的所有的文件,以免因之前的错误遗留的文件导致编译安装不成功。
2、注意引用库的顺序为:-lssl -lcrypto,如果为-lcrypto –lssl,编译时会出现错误。
3、openssl所涉及到的算法介绍见博客:
http://blog.csdn.net/guoliquan1/article/details/4703315
4、参考书箱和文档:《Openss安装指南》《OpenSSL使用指南》。
相关文章推荐
- CentOS 7安装Splunk
- 在内网搭建docker registry并使用密码鉴权的方法
- Linux 登陆日志替换、清理方法
- Apache ActiveMQ教程
- arm-linux-gcc 常用参数讲解 gcc编译器使用方法
- Visual EmbedLinux Tools 0.2.6
- Nginx的命令行控制
- ngrok 反向代理服务
- 基于Redux架构的单页应用开发总结(一)
- Nginx 禁用IP IP段
- Nginx 禁用IP IP段
- 2016 alictf LoopAndLoop write up
- Linux更改服务器Hostname
- apt-get 基本
- 几种CPU架构
- Docker源码分析
- 在linux下使用dnspod实现动态域名DDNS
- CentOS 6.4+nginx+php+mysql详细设置步骤
- Android Studio 下无法调用org.apache。。类的解决方法
- nginx初探-安装部署