zoukankan      html  css  js  c++  java
  • openEuler

    OpenSSL编译安装

    我们去OpenSSL官网下载最新版本OpenSSL 1.1.1k的源码openssl-1.1.1k.tar.gz,然后把代码上传到openEuler云服务器中。
    建立两个文件夹,分别放置OpenSSL的源码和安装路径,记住pwd运行的结果/root/rocopenssl:
    mkdir rocopensslsrc rocopenssl
    cd rocopenssl
    pwd
    解压源代码到rocopensslsrc文件夹:
    tar -zxvf openssl-1.1.1k.tar.gz -C rocopensslsrc
    配置编译安装路径(/root/rocopenssl),和openEuler系统默认的不同。
    cd rocopensslsrc/openssl-1.1.1k
    ./config --prefix=/root/rocopenssl

    编译(make时间稍长,耐心等待),测试、安装,其中测试步骤需要全部测试:
    make
    make test
    make install
    查看安装后的版本,确定是最新安装的1.1.1k版:
    cd ~/rocopenssl
    ./bin/openssl version

    查看帮助手册

    OpenSSL编程

    简单测试
    编写一个测试代码test_openssl.c:

    #include <stdio.h>
    #include <openssl/evp.h>
    
    int main(){
    	
        OpenSSL_add_all_algorithms();
    	
        return 0;
    }
    

    然后用下面命令编译:

    gcc -o to test_openssl.c -I /root/rocopenssl/include -L /root/rocopenssl/lib -lcrypto -lpthread
    执行./to;echo $?,结果打印0.

    实验

    3.2查找最大数

    实验代码:

    .section .data
    .align 3
    my_data:
            .quad 1
            .quad 2
            .quad 5
            .quad 8
            .quad 10
            .quad 12
    
    my_data_count:
            .quad 6
    
    .align 3    
    print_data:
            .string "big data: %d
    "
    
    .section .text
    .globl main
    main:
            stp x29, x30, [sp, -16]!
    
            ldr x0, =my_data
            ldr x1, my_data_count
    
            add x4, x0, #40
    
            mov x3, xzr
    1:
            ldr x2, [x0], #8
            cmp x2, x3
            csel x3, x2, x3, hi
    
            cmp x0, x4
            b.ls 1b
    
            ldr x0, =print_data
            mov x1, x3
    
            bl printf
    
            ldp x29, x30, [sp], 16
            ret
    

    结果截图:

    3.3 :汇编语言练习——通过 C 语言调用汇编函数

    //compare.c 文件如下。
    int compare_data(int a, int b)
    { 
    return (a >= b) ? a : b;
    } 
    //main.S 文件如下。
    .section .data
    .align 3
    print_data:
    .string "big data: %d
    "
    .section .text
    .globl main
    main:
    stp x29, x30, [sp, -16]!
    mov x0, #6
    mov x1, #5
    bl compare_data
    mov x1, x0
    ldr x0, =print_data
    bl printf
    ldp x29, x30, [sp], 16
    ret
    

    结果截图

    3.4通过汇编语言调用C函数

    实验代码:

    //compare.S
    .section .text
    .globl compare_data
    compare_data:
    cmp x0, x1
    csel x0, x0, x1, hi
    ret
    //main.c
    #include <stdio.h>
    extern int compare_data(int a, int b);
    int main()
    { 
    int val;
    val = compare_data(5, 6);
    printf("big data: %d
    ", val);
    }
    

    结果截图:

    3.5GCC内联汇编

    实验代码:

    #include <stdio.h>
    static int compare_data(int a, int b)
    { 
    int val;
    asm volatile (
    "cmp %1, %2
    "
     "csel %0, %1, %2, hi
    "
     : "+r" (val)
     : "r" (a), "r" (b)
     : "memory");
    return val;
    } 
    int main()
    { 
    int val;
    val = compare_data(5, 6);
    printf("big data: %d
    ", val);
    val = compare_data(6, 4);
    printf("big data: %d
    ", val);
    }
    

    结果截图:

  • 相关阅读:
    【机器学习】作业7: 随机森林
    【机器学习】作业6-EM算法
    【分布式系统】Consistent Hashing
    北京G,计算几何,线段相交
    带权区间调度问题,软件的期中复习
    机器学习期中考复习(md全是证明题)
    hihocoder35 模板场
    缺课两周后的数值计算笔记
    跨域访问设置
    截取视频第一帧图片
  • 原文地址:https://www.cnblogs.com/20191301lhq/p/15488402.html
Copyright © 2011-2022 走看看