Linux 交叉编译(toolchain) ARM 版openssl-1.0.0s的libssl.so 库

news/2025/3/9 13:07:22/文章来源:https://www.cnblogs.com/wutou/p/18757139

前言全局说明


一、说明

环境:

ubuntu 18.04

二、下载源码:

官网:
https://openssl-library.org

源码下载:
https://openssl-library.org/source/old/1.0.0/index.html

下载,指定版本:
https://github.com/openssl/openssl/releases/download/OpenSSL_1_0_0s/openssl-1.0.0s.tar.gz


三、依赖环境

3.1 ubunut

sudo apt-get -y install 

四、编译

4.1 生效编译环境

export toolchain_BIN=你的编译工具链路径/bin## Set toolchain 
export PATH=$toolchain_BIN:$PATH
export target_host=aarch64-linux-gnu (修改成你的编译工具名,bin目录里的)
export CROSS_COMPILE=${target_host}# export ARCH=arm
export ARCH=arm64export AR=${CROSS_COMPILE}-ar
export AS=${CROSS_COMPILE}-as
export CC=${CROSS_COMPILE}-gcc
export CXX=${CROSS_COMPILE}-g++
export LD=${CROSS_COMPILE}-ld
export NM=${CROSS_COMPILE}-nm
export OBJDUMP=${CROSS_COMPILE}-objdump
export STRIP=${CROSS_COMPILE}-strip

4.2 编译

./Configure linux-armv4 no-asm shared no-async

执行成功部分截图

make -j4
或
make -j$(nproc)

-j4 用4个线程编译
$(nproc)获取CPU线程数

4.3 编译结果

ll .libs/

执行成功部分截图


五、错误记录

5.1 工具链名报错

making all in crypto...
making all in ssl...
making all in engines...
making all in apps...
make[1]: 警告: jobserver 不可用: 正使用 -j1。添加 “+” 到父 make 的规则。
make[1]: 警告: jobserver 不可用: 正使用 -j1。添加 “+” 到父 make 的规则。
make[1]: 警告: jobserver 不可用: 正使用 -j1。添加 “+” 到父 make 的规则。
make[1]: 进入目录“/home/qt/build_source_all/libs_so/openssl_1.0/openssl-1.0.0s/engines”
arm-openwrt-linux-arm-openwrt-linux-gcc -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIO -DTERMIO -O3 -Wall -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM   -c -o e_4758cca.o e_4758cca.c
make[1]: arm-openwrt-linux-arm-openwrt-linux-gcc: Command not found
<内置>: recipe for target 'e_4758cca.o' failed
make[1]: *** [e_4758cca.o] Error 127

image

解决方法1:

打开源码下 Makefile 把 CC=后面的 $(CROSS_COMPILE) 删掉

解决方法2:

生效环境

export target_host=arm-openwrt-linux 
export CROSS_COMPILE=${target_host}-

加入参数

--cross-compile-prefix=${target_host}-

注意:是${target_host}值,不是 ${CROSS_COMPILE}-



5.2 找不到 termio.h

make[2]: 进入目录“/home/qt/build_source_all/libs_so/openssl_1.0/openssl-1.0.0s/crypto/ui”
arm-openwrt-linux-gcc -I.. -I../.. -I../asn1 -I../evp -I../../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -Wall   -c -o ui_err.o ui_err.c
arm-openwrt-linux-gcc -I.. -I../.. -I../asn1 -I../evp -I../../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -Wall   -c -o ui_lib.o ui_lib.c
arm-openwrt-linux-gcc -I.. -I../.. -I../asn1 -I../evp -I../../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -Wall   -c -o ui_openssl.o ui_openssl.c
ui_openssl.c:230:11: fatal error: termio.h: No such file or directory# include <termio.h>^~~~~~~~~~
compilation terminated.
<内置>: recipe for target 'ui_openssl.o' failed
make[2]: *** [ui_openssl.o] Error 1

image

解决方法1:

打开源码下 Makefile 把 -DTERMIO 参数删除.

解决方法2:

从别的工具链下载 termio.h 放到工具链 include 目录

解决方法3:

搜索工具链,找到 termios.h 软连接到 termio.h

ln -s termios.h termio.h


5.3 没有找到工具链

/usr/bin/perl ../util/mkbuildinf.pl "arm-openwrt-linux-gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIO -O3 -Wall" "linux-armv4" >buildinf.h
arm-openwrt-linux-gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIO -O3 -Wall   -c -o cryptlib.o cryptlib.c
make[1]: arm-openwrt-linux-gcc: Command not found
<内置>: recipe for target 'cryptlib.o' failed
make[1]: *** [cryptlib.o] Error 127

image

解决方法:

export PATH=$PATH:工具链的bin路径

将工具链绝对路径加入PATH,或直接在 --cross-compile-prefix 时直接绝对路径



5.4 编译tty_orig错误

PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIO -O3 -Wall   -c -o ui_openssl.o ui_openssl.c
arm-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined
ui_openssl.c: In function 'noecho_console':
ui_openssl.c:531:43: error: invalid application of 'sizeof' to incomplete type 'struct termio'memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig));^
ui_openssl.c:532:12: error: invalid use of undefined type 'struct termio'tty_new.TTY_FLAGS &= ~ECHO;^
ui_openssl.c: In function 'echo_console':
ui_openssl.c:555:43: error: invalid application of 'sizeof' to incomplete type 'struct termio'memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig));^
ui_openssl.c:556:12: error: invalid use of undefined type 'struct termio'tty_new.TTY_FLAGS |= ECHO;^
ui_openssl.c: At top level:
ui_openssl.c:299:19: error: storage size of 'tty_orig' isn't knownstatic TTY_STRUCT tty_orig, tty_new;^~~~~~~~
ui_openssl.c:299:29: error: storage size of 'tty_new' isn't knownstatic TTY_STRUCT tty_orig, tty_new;^~~~~~~
<内置>: recipe for target 'ui_openssl.o' failed
make[2]: *** [ui_openssl.o] Error 1

image

解决方法:

创建 STAGING_DIR 变量

export STAGING_DIR=""


5.5


解决方法:






免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://blog.csdn.net/ty3219/article/details/77717478
https://blog.csdn.net/duapple/article/details/107095657 (sed 替换错误)
https://blog.csdn.net/2301_77171572/article/details/144667457 (4.2)
https://blog.csdn.net/2004v2004/article/details/145864280
https://blog.csdn.net/zhiyuan2021/article/details/126757516



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895136.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DMS+ADB-PG支持一键部署QwQ-32B推理模型

3月6日,阿里云发布并开源全新推理模型通义千问QwQ-32B。现已支持在DMS+ADB上私域部署并与Dify打通使用。3月6日,阿里云发布并开源全新的推理模型通义千问QwQ-32B。通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。在保持强劲…

下载安装nvm

1.下载 网址:Release - nvm-windows:一个针对Windows平台的Node.js版本管理工具,是用Go语言编写的。 - GitCode 能不能打开看命,我是一直打不开,还是同事打开了发给我得 2.安装 找到nvm文件,找到setting.txt文件并打开复制下面代码,引用镜像:node_mirror: https://npm…

算法学习笔记:DS-区间类问题

DS:区间类问题 前言 对于区间或区间子区间问题,我们有一些惯用套路简化问题。 很多区间问题都可以转化为平面上矩形问题,用扫描线就可以解决。具体地,我们把区间 \([l,r]\) 抽象为平面内的点 \((l,r)\)。 同时我们可以使用反演的思路,考虑每个值对哪些询问如何造成贡献,而…

vuepress中引入本地资源

二次封装了一个jessibuca的组件 使用vuepress写文档一时不知如何引入jessibuca.js文件 于是搜索且验证以下可行方式 // .vuepress/config,js 文件 添加head配置项 module.exports = {...head: [[script, { src: /jessibuca-pro.js }]]... }jessibuca.js和decoder.js文件放在pub…

VMware ESXi 6.7 U3v (ESXi670-202503001) 下载

VMware ESXi 6.7 U3v (ESXi670-202503001) 下载VMware ESXi 6.7 U3v (ESXi670-202503001) 下载 VMware ESXi 6 Extend Support Release 🆓 🔄 请访问原文链接:https://sysin.cn/blog/vmware-esxi-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org2025-03-0…

Linux系统离线安装docker环境

1 下载docker的安装文件 下载地址:https://download.docker.com/linux/static/stable/x86_64/ 2 解压 tar -zxvf docker-18.06.3-ce.tgz 3 复制 cp ./docker/* /usr/bin 4 创建docker.service文件 cd /etc/systemd/system/ touch docker.service 5 编辑docker.service文件 vi …

告别Qt,拥抱CUTOS - 智能设备应用开发新选择

本文探讨了在智能设备应用开发领域,从传统Qt框架向新兴CUTOS框架的转变。CUTOS在开发效率、稳定性、学习门槛和生态融合等方面表现突出,将成为更具前瞻性的开发框架。一、引言 Qt是一个功能强大且历史悠久的跨平台C++应用开发框架,由芬兰公司Qt Company开发。Qt在汽车、航空…

k3s高可用集群搭建

机器统一操作 # 更新yum源数据 # 复制ContOS-Base.repo到/etc/yum.repos.d/ yum makecache yum update -y# 安装vim yum install -y vim# 关闭swap vim /etc/fstab 注释掉最后一行 # /dev/mapper/centos-swap swap swap defaults 0 0 swapoff -a#…

kylin v10 sp2升级glibc到2.29和2.31

目录环境安装glibc2.29安装glibc2.31 环境 [root@kyline10 ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Sword)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (…

pycharm连接CentOS虚拟机并执行Spark

pycharm连接虚拟机注意:pycahrm远程使用ssh连接虚拟机需要专业版在CentOS7的虚拟机当中,会自带一个python2.6老版本的python,所以自己准备一个python3.x版本的解释器,如python3.9 一、前置准备工作 # 安装前置依赖 yum install zlib-devel bzip2-devel openssl-devel ncurs…

02_openai开发

基本概念Tokens(标记):在自然语言处理中,token是输入文本被分割成的小单元。一个token可以是一个单词、一个子词,甚至是一个字符。这取决于文本的具体分割方式。OpenAI常用参数 1. max_tokens(最大token数) 定义:指令生成的回答中包含的最大token数。例如,如果设置为1…

day20 yum的详细的讲述

day20 yum的精讲 yum是centos 7中很重要的工具需要我们去了解和学习 1.学习的任务和背景 一般开发团队需要数据库的环境来测试程序 现在需要运维人员来协助在测试机器上Centos7上安装好 MySQL-5.6.43版本来作为前期迁移的准备的工作 同时== 配备好本地的yum源==方便后续软件包的…