【经验分享】linux交叉编译 - openssl动态库
一、准备工作
1、到openssl官网下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(如上传到目录/home/test下),并使用tar -xvf openssl-1.1.1d.tar.gz解压:
2、将要用到的交叉编译工具链解压后,找到交叉编译器所在路径:
注意:gcc/ar/ranlib/nm等文件的名字根据编译链的不同,文件名开头会有所不同,但文件名结尾是不变的,如arm架构比较常见的编译器是arm-linux-gcc
二、配置
进入openssl源码目录,运行如下配置命令
./config shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl
或./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl
其中prefix 是安装目录,openssldir 是配置文件目录,shared 作用是生成动态链接库(即.so库)
注意:no-asm表示不使用汇编代码,如果编译有问题再加,没有问题就不加
注意: 如果遇到x86_64的编译链,且sysroots下面有两个目录,需要添加sysroot参数,用如下命令配置(+参考图片):
./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl --sysroot="{sysroots/头文件所在路径}"
一般来说,头文件所在路径与XXX-gcc/g++/ar/nm等(XXX是交叉编译器名字的前缀)的所在目录不一样,在另外一个大目录下(如下图所示),还可以找到具体的xxx-gcc文件,使用 /{完整路径}/xxx-gcc -v命令,会打印出sysroot所在目录
三、修改Makefile
配置完成后会在openssl源码目录下生成一个Makefile文件,打开查看内容,会看到CROSS_COMPILE的值是空的
这时要将CROSS_COMPILE的值修改为XXX-gcc所在绝对路径+XXX-gcc的文件名前缀,也就是说要先找到交叉编译工具xxx-gcc/g++/ar/nm等文件所在路径(其中“XXX-”是交叉编译工具文件名前缀):
其实修改CROSS_COMPILE的值最终是为了修改arm-linux-xxx-gcc/ar/ranlib/nm等的路径,在比较老的openssl版本中,没有CROSS_COMPILE参数,需要修改如下5个变量的值 (注意下图所用的交叉编译工具不是跟前面的不一样,所以路径也不同):
四、编译出库
修改完Makefile后就可以进行编译了,到openssl源码目录下,运行make命令:
openssl源码目录下,运行make命令:
make
如果没有报错,再运行make install
make install
在配置的openssl安装目录下/home/test/openssl找到lib目录,有如下两个文件:
libcrypto.so.1.1、libssl.so.1.1和软链接libcrypto.so、libssl.so
五、其他说明
1、交叉编译工具不是在任何环境上都可使用的,需要系统环境和编译工具匹配才可以,主要看CPU和指令集
2、如果不需要交叉编译工具,而是直接使用gcc,那么,配置生成Makefile后不需要修改Makefile(即跳过第三步),直接编译即可
3、有的编译工具是32位的,如果在64位的linux机器上使用,可能会报如下错误,这时只要将Makefile中的-m64都删除,再进行编译即可
作者:Lily_w
相关文章
- Linux下查看已加载的驱动程序(linux查看加载驱动)
- Linux下动态库导出类技术研究(linux动态库导出类)
- Unix与Linux:新时代的技术推动者(unix与linux)
- 服务Linux快速启动HTTP服务实现网络分享(linux启动http)
- Linux下连接数据库的安全端口配置(linux端口连接数据库)
- Linux动态库升级,提升运行效率(linux动态库更新)
- Linux Vim快捷补全技巧(linuxvim补全)
- Linux组合动态库:一种新技术(linux合并动态库)
- Linux 上的动态磁盘管理(动态磁盘linux)
- 解决Linux系统下波特率设置问题(linux波特率设置)
- Linux基础知识:极具吸引力的PPT分享(linux基础教程ppt)
- 安全守护:Linux 加密可靠保护你的数据(加密linux)
- Linux系统安装:把智慧带到每一台电脑(linux操作系统的安装)
- 『Linux防火墙关闭:闯入者可自由行动』(关闭linux的防火墙)
- Linux防火墙关闭指南(关闭linux的防火墙)
- Linux维护模式使用技巧分享: 解决常见问题(linux维护模式)
- Linux制作动画的技术指南(linux怎么制作动画)
- 如何在Linux中正确设置虚拟内存(linux虚拟内存设置)
- 优质分享:Linux运维简历模板,助你成功应聘!(linux运维简历模板)
- 深入了解Linux系统的文件类型(linux系统的文件类型)
- Linux 脚本实现调用脚本的精彩示例(linux脚本调用脚本)
- Linux下装配显卡驱动:必要步骤指引(linux装显卡驱动)
- 「Linux安装论坛」:分享最新的Linux安装技巧和心得,讨论实用的软件配置和命令操作。(linux安装论坛)
- 快速上手:Linux下如何搭建MySQL数据库(linux下搭建mysql)
- Linux动态链接:提高程序的效率和可维护性(linux 动态 链接)
- .2ldlinux.so.2: Linux下可靠的动态链接器(ld-linux.so)
- 分享Linux技术,开启无限可能(linux技术分享)
- Linux上开启动态库设计之旅(linux 创建动态库)
- Linux实现动态域名解析加速网络访问(linux 动态域名)
- 「Linux运维社区」:分享经验,交流技术,共创技术王国。(linux运维社区)
- Linux文件调用执行技巧分享(linux 文件调用执行)
- Linux下查看僵尸进程的方法(linux僵尸进程查看)
- Linux安卓模拟器新体验!(linux安卓模拟器)