当前位置: 首页 > article >正文

openssl交叉编译(这次基本上正规了)

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        此示例用的是openssl-1.1.1k.tar.gz,不过方法应该各个版本都适用(同样的方法也用在了最新的4.3版上)。交叉编译工具链用的是arm官方交叉编译工具,我用过不同的交叉编译工具链,结果发现官方的最好用。

目录

源码包上传

 配置(自动)./config

查看支持的系统./Configure(不带参数)

配置系统./Configure(带参数)

主要编译参数说明

--cross-compile-prefix=PREFIX

--prefix=DIR

--openssldir=DIR

多说两句


源码包上传

tar -xvf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k

        检查一下有没有libssl.so在目录树里面:“find . -name libssl.so*”,输出应该是空的。

 配置(自动)./config

./config

        这是自动检测系统,不能做交叉编译(除非整个环境都配置为交叉编译)。

        所以我们不用这个。

        配置完成后生成Makefile,然后就可以像通常那样编译和安装了:

make
make test
make install

查看支持的系统./Configure(不带参数)

        openssl已经支持很多系统,配置好了需要的参数,所以尽量用已经支持的,不要自己去修改。查看支持的系统:

./Configure

        输出是支持的系统列表:

root@debian:~/src/openssl-1.1.1k# ./Configure
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] os/compiler[:flags]

pick os/compiler from:
BS2000-OSD BSD-generic32 BSD-generic64 BSD-ia64 BSD-sparc64 BSD-sparcv8
BSD-x86 BSD-x86-elf BSD-x86_64 Cygwin Cygwin-i386 Cygwin-i486 Cygwin-i586
Cygwin-i686 Cygwin-x86 Cygwin-x86_64 DJGPP MPE/iX-gcc UEFI UWIN VC-CE VC-WIN32
VC-WIN32-ARM VC-WIN32-ONECORE VC-WIN64-ARM VC-WIN64A VC-WIN64A-ONECORE
VC-WIN64A-masm VC-WIN64I aix-cc aix-gcc aix64-cc aix64-gcc android-arm
android-arm64 android-armeabi android-mips android-mips64 android-x86
android-x86_64 android64 android64-aarch64 android64-mips64 android64-x86_64
bsdi-elf-gcc cc darwin-i386-cc darwin-ppc-cc darwin64-arm64-cc darwin64-ppc-cc
darwin64-x86_64-cc gcc haiku-x86 haiku-x86_64 hpux-ia64-cc hpux-ia64-gcc
hpux-parisc-cc hpux-parisc-gcc hpux-parisc1_1-cc hpux-parisc1_1-gcc
hpux64-ia64-cc hpux64-ia64-gcc hpux64-parisc2-cc hpux64-parisc2-gcc hurd-x86
ios-cross ios-xcrun ios64-cross ios64-xcrun iossimulator-xcrun iphoneos-cross
irix-mips3-cc irix-mips3-gcc irix64-mips4-cc irix64-mips4-gcc linux-aarch64
linux-alpha-gcc linux-aout linux-arm64ilp32 linux-armv4 linux-c64xplus
linux-elf linux-generic32 linux-generic64 linux-ia64 linux-mips32 linux-mips64
linux-ppc linux-ppc64 linux-ppc64le linux-sparcv8 linux-sparcv9 linux-x32
linux-x86 linux-x86-clang linux-x86_64 linux-x86_64-clang linux32-s390x
linux64-mips64 linux64-s390x linux64-sparcv9 mingw mingw64 nextstep
nextstep3.3 sco5-cc sco5-gcc solaris-sparcv7-cc solaris-sparcv7-gcc
solaris-sparcv8-cc solaris-sparcv8-gcc solaris-sparcv9-cc solaris-sparcv9-gcc
solaris-x86-gcc solaris64-sparcv9-cc solaris64-sparcv9-gcc solaris64-x86_64-cc
solaris64-x86_64-gcc tru64-alpha-cc tru64-alpha-gcc uClinux-dist
uClinux-dist64 unixware-2.0 unixware-2.1 unixware-7 unixware-7-gcc vms-alpha
vms-alpha-p32 vms-alpha-p64 vms-ia64 vms-ia64-p32 vms-ia64-p64 vos-gcc
vxworks-mips vxworks-ppc405 vxworks-ppc60x vxworks-ppc750 vxworks-ppc750-debug
vxworks-ppc860 vxworks-ppcgen vxworks-simlinux

NOTE: If in doubt, on Unix-ish systems use './config'.

        大部分情况我们是为arm交叉编译,所需的系统类型参数是“linux-armv4”和“linux-aarch64”。

配置系统./Configure(带参数)

./Configure linux-armv4 --cross-compile-prefix=/root/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

        配置为arm32位系统,第一个参数为系统类型,第二个参数为交叉编译工具链前缀(取决于你的工具链安装位置和名称),输出:

Configuring OpenSSL version 1.1.1k (0x101010bfL) for linux-armv4
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************

        注意最上面一行“Configuring OpenSSL version 1.1.1k (0x101010bfL) for linux-armv4” ,然后就可以用make编译了。

        编译结果就在当前目录下,用file检查文件类型:

root@debian:~/src/openssl-1.1.1k# ls
ACKNOWLEDGEMENTS  build.info  configdata.pm   crypto   e_os.h    include        libcrypto.pc      libssl.map     LICENSE   NOTES.ANDROID  NOTES.VMS   README         test
apps              CHANGES     Configurations  demos    external  INSTALL        libcrypto.so      libssl.pc      Makefile  NOTES.DJGPP    NOTES.WIN   README.ENGINE  tools
appveyor.yml      config      Configure       doc      FAQ       libcrypto.a    libcrypto.so.1.1  libssl.so      ms        NOTES.PERL     openssl.pc  README.FIPS    util
AUTHORS           config.com  CONTRIBUTING    engines  fuzz      libcrypto.map  libssl.a          libssl.so.1.1  NEWS      NOTES.UNIX     os-dep      ssl            VMS
root@debian:~/src/openssl-1.1.1k# file libssl.so.1.1 libcrypto.so.1.1
libssl.so.1.1:    ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=5ee86f9d91497d1ff2beec6250df479b9805c44c, with debug_info, not stripped
libcrypto.so.1.1: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=c6a762c6f2cc50e686ea4d9c5a4bb67d808a2763, with debug_info, not stripped

        “ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV)”,这说明确实是交叉编译出来的结果。

主要编译参数说明

        这些参数同时适用于config和Configure。

--cross-compile-prefix=PREFIX

        这个前面已经用到了,是交叉编译工具链的前缀,默认编译器是gcc,加了这个前缀就成了“/root/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc”(按照前面的设置),ar也是如此,编译相关的几个命令都加上了这个前缀。

        如果一个特定的交叉编译环境已经把CC设置成了交叉编译工具(专用的交叉编译工具一般如此,而我用的这个是arm官网提供的标准交叉编译工具),则不需要使用这个参数。

        这个参数也可以用环境变量CROSS_COMPILE代替。命令行参数会覆盖环境变量设置。

--prefix=DIR

        安装路径,交叉编译无所谓,反正只要两个so或a就行了。

        make install将把输出复制到安装路径。

--openssldir=DIR

        运行时使用的配置和默认证书、密钥的存放位置。一般也不关心这个。

多说两句

        如果需要修改生成的Makefile一般还是参数或交叉编译工具设置有问题,用标准交叉编译工具可以减少此类问题(如果可以的话)。很多时候出问题还是文档没吃透。

        为了编译更快可以用“make -j4”,4代表4个任务并行,可以设置为和CPU核数相同。

        如果编译出错,为了查看编译参数到底有什么问题,你可能非常需要“make VERBOSE=1”,VERBOSE=1将打开命令回显,这样就可以仔细分析是哪个头文件目录没包含还是哪个库没有链接。如果是cmake,需要在cmake 时加上“-DCMAKE_VERBOSE_MAKEFILE=ON”,这样生成的makefile就会包含“VERBOSE=1”。

        


(这里是文档结束)


http://www.kler.cn/a/451342.html

相关文章:

  • 计算机图形学知识点汇总
  • 重温设计模式--代理、中介者、适配器模式的异同
  • 如何识别钓鱼邮件和诈骗网站?(附网络安全意识培训PPT资料)
  • Naive UI 多选框自定义tag和label
  • mapbox基础,加载mapbox官方地图
  • 干货分享:ISO 20000认证的适用范围、认证资料清单、认证流程等问题详解
  • QT的前景与互联网岗位发展
  • [OpenGL]使用 Compute Shader 实现矩阵点乘
  • 分布式测试插件 pytest-xdist 使用详解
  • 信号仿真高级工程师面试题
  • Ubuntu下通过Docker部署Caddy服务器
  • Meta如何用极致技术实现接近完美的缓存一致性?
  • HAPTION Virtuose 3D RV力反馈设备
  • 【NI国产替代】基于国产FPGA+全志T3的全国产16振动+2转速(24bits)高精度终端采集板卡
  • oracle常用语句
  • 【Rust自学】6.1. 定义枚举
  • lookup join 使用缓存参数和不使用缓存参数的执行前后对比
  • 区块链平台安全属性解释
  • C语言-结构体内存大小
  • 【产品更新】汇匠源保证金保函平台v2.0.23
  • TipTap编辑器:现代化的富文本编辑解决方案
  • 24/12/24 力扣每日一题 # LeetCode 524. 通过删除字母匹配到字典里最长单词 全网最详细解释
  • Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作
  • 【落羽的落羽 C语言篇】自定义类型——联合体、枚举
  • 【每日学点鸿蒙知识】沙箱目录、图片压缩、characteristicsArray、gm-crypto 国密加解密、通知权限
  • PyTorch 神经网络回归(Regression)任务:关系拟合与优化过程