一、准备工作

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交叉编译 - openssl动态库的更多相关文章

  1. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  2. Linux和windows动态库

    转载:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中 ...

  3. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  4. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  5. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  6. linux下so动态库一些不为人知的秘密(转)

    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库, ...

  7. linux下so动态库一些不为人知的秘密

    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.    基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些 ...

  8. linux下so动态库一些不为人知的秘密(中二)

    继续上一篇< linux下so动态库一些不为人知的秘密(中) >介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只 ...

  9. linux下so动态库一些不为人知的秘密(中)

    上一篇(linux下so动态库一些不为人知的秘密(上))介绍了linux下so一些依赖问题,本篇将介绍linux的so路径搜索问题. 我们知道linux链接so有两种途径:显示和隐式.所谓显示就是程序 ...

随机推荐

  1. 单点登录 - OAuth 2.0 授权码模式(一)

    OAuth 2.0定义了四种授权方式 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentials ...

  2. 20190630模拟赛B(单调队列优化dp)

    .dp无疑了其实. 在考场上,我写了一个错解,但是数据小都能过,只是会爆空间,考场上想着怎么用滚动数组优化来着....把错解的方程列出来吧 ;i<=n;i++) { ;j<=k;j++) ...

  3. Docker 学习 | 基础命令

    基本概念定义 基本组成 客户端/守护进程 C/S架构 本地/服务器 镜像 容器基石 只读文件系统 联合加载(union mount) 容器 通过镜像启动 执行 写时复制 仓库 公有 docker hu ...

  4. python——namedtuple

    namedtuple()概念理解分享 我们都知道元组tuple的概念,tuple是一个定义之后就不能够更改的可迭代对象,namedtuple作为tuple的兄弟具有同样的属性,一旦定义就不可以更改.但 ...

  5. 易初大数据 2019年10月24日 spss笔记 王庆超

    数据文件的重置结构:横向结构(个案组),纵向结构,不符合分析方法的时候就需要重组,选定变量重组为个案,数据—重构,重构数据向导,选定变量重组为个案,将选定个案重构位变量,转置所有数据,变量组数目,一个 ...

  6. php imagick 文字居中的方法

    php imagick 文字居中的方法<pre> public function getwenzinfo($nickName) { $nickNamelen = mb_strlen($ni ...

  7. ARP协议字段解读

    Hardware type : 硬件类型,识别链路层协议 Protocol type : 协议类型,标识网络层协议 Hardware size : 硬件地址大小,标识MAC地址长度,这里是6个字节(4 ...

  8. 本地yum配置

    yum yum(Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器.基于 RPM 包管理,能够从 ...

  9. 苹果客户端input时页面自动放大的问题

    一.问题: 最近在用vue测试的时候发现,安卓端在输入框input时不存在页面自动缩放的问题,苹果客户端认为是考虑到用户的体验效果,才出现输入框自动放大的功能.但也收到了不少用户反馈体验效果不周. 二 ...

  10. 为企业应用开发提速,写给企业IT部门的低代码开发基础知识

    简介:应用程序开发长期以来一直是IT部门和业务部门面临的问题. IT部门总是被新的应用程序需求弄得不堪重负.他们不可能完成业务部门想要完成的每一个项目. 同时,业务部门的用户厌倦了等待,并开始完全绕过 ...