• 【经验分享】linux交叉编译


    一、准备工作

        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

  • 相关阅读:
    golang中的值传递和引用传递
    链表

    hashtable(哈希表)
    TAO: Facebook’s Distributed Data Store for the Social Graph. 论文阅读笔记(上)
    Skip Lists: A Probabilistic Alternative to Balanced Trees 跳表论文阅读笔记
    【译】如何实现一个现代化电子商城搜索?(一)
    Elasticsearch搜索资料汇总
    Python 按比例获取样本数据或执行任务
    Python 按分类样本数占比生成并随机获取样本数据
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/11861298.html
Copyright © 2020-2023  润新知