zoukankan      html  css  js  c++  java
  • openssl build MSYS2

    https://github.com/openssl/openssl/issues/10459

    github 是否解决win下编译问题 提问

    linux交叉编译win

     第一步:安装mingw32

    本人 linux 环境是ubuntu18.04  

    sudo apt-get install mingw-w64
    sudo apt-get install mingw-w64-tools
    sudo apt-get install mingw-w64-i686-dev
    sudo apt-get install mingw-w64-x86-64-dev
    https://blog.csdn.net/zuihaobushi/article/details/90167362

    CROSS_COMPILE="x86_64-w64-mingw32-" ./Configure mingw64 no-asm shared --prefix=/opt/mingw64

    PATH=$PATH:/opt/mingw64/bin make

    sudo PATH=$PATH:/opt/mingw64/bin make install

    https://www.cnblogs.com/findumars/p/6372299.html

    http://www.blogcompiler.com/2011/12/21/openssl-for-windows/

    https://www.perl.org/

    msvc

    perl Configure --prefix="%CD%..MSVC64rdll" --openssldir="%CD%..MSVC64rdllssl" -EHsc -arch:AVX -FS threads no-deprecated shared VC-WIN64A && nmake
    ./Configure --prefix=$PWD/GCC32r shared mingw --unified && make depend && make && make install
    pacman -S base-devel msys2-devel mingw-w64-{x86_64,i686}-toolchain 

    perl Configure mingw64 no-shared --prefix=/d/Code/openssl-1.0.2a/build-x64-PT-seh

    ./Configure threads no-deprecated shared mingw64 >_Configure.log && make
    perl Configure -MTd threads no-deprecated no-shared debug-VC-WIN64A && nmake
      • '/MDd' for Debug+Shared build,
      • '/MD' for Release+Shared build,
      • '/MT' for Release+Static build,
        as expected according to its description. But for some reason it add
      • '/MT' and '/MDd' keys, instead of '/MTd', for Debug+Static build.
    ./Configure --prefix="$PWD/../GCC64d" -std=gnu11 -mtune=native -march=native threads no-deprecated shared debug-mingw64 >_Configure.log && ma ke 

    ./configure --prefix="$BASEDIR" --with-mibdirs="$BASEDIR/share/snmp/mibs" --with-mib-modules="agentx disman/event-mib winExtDLL " --disable-embedded-perl --without-perl-modules --enable-ipv6

    ./Configure --prefix="$PWD/../GCC64r" -std=gnu11 -mtune=native -march=native threads no-deprecated shared mingw64 && make

     perl Configure mingw64 --cross-compile-prefix=x86_64-w64-mingw32-

    Then I make with no problems:
    make

    Then I test:
    make test

        perl Configure VC-WIN64A shared --prefix=devopenssl-1.1.1 /FS
        jom -j 8
        perl Configure VC-WIN64A shared --prefix=devopenssl /FS
        jom -j 8
    perl Configure mingw no-shared no-asm --prefix=/c/OpenSSL
    make depend
    make 

     

     git config core.autocrlf false
    git rm --cached -r .
    git reset --hard

    git config --local core.autocrlf false
    git config --local core.eol lf

    git rm --cached -r .
    git reset --hard

    前文 git等各种源码仓库

    https://www.cnblogs.com/marklove/p/11831539.html

    x1
    >>
    O
     
     
     
     
     
     
    git clone https://github.com/openssl/openssl
    git submodule update --init --recursive
    ./configure mingw64 shared

    ./Configure mingw64 初始化配置 2

    pacman -S base-devel
    pacman -S mingw-w64-x86_64-toolchain
    /*pacman -S mingw64/mingw-w64-x86_64-gcc*/
    windows
    
    刚开始编译时提示找不到gcc
    
    添加环境变量
    export PATH=$PATH:/mingw64/bin
    $source /etc/profile
    
    将openssl源码复制到C:msys64homeworld下
    
    MSYS2 SHELL
    
    切换到
    
    /home/world/openssl
    
    ./Configure mingw64
    
    make
    
    ============================================
    
    ubuntu下
    
    进去openssl
    
    perl Configure gcc shared
    
    make

    常用软件包编译

    常用软件包我们可以简单的使用命令直接从官网安装即可,比如安装openssl:

    • 32bit:pacman -S mingw-w64-i686-openssl
    • 64bit: pacman -S mingw-w64-x86_64-openssl

    有时候根据项目需要我们不得不自己动手编译依赖的软件包,以下是我在工作用到的库编译过程记录。

    openssl

    • 64bit

      mkdir openssl64
      cd openssl64
      tar zxvf openssl-1.0.2c.tar.gz
      cd openssl-1.0.2c
      ./configure mingw64 shared
      make
      make INSTALL_PREFIX=../ install
    • 32bit

      mkdir openssl32
      cd openssl32
      tar zxvf openssl-1.0.2c.tar.gz
      cd openssl-1.0.2c
      ./configure mingw shared
      make
      make INSTALL_PREFIX=../ install

    zlib

      • 32bit 

        mkdir zlib32 
        cd zlib32 
        tar zxvf zlib-1.2.8.tar.gz 
        cd zlib-1.2.8/ 
        make -f ./win32/Makefile.gcc 
        make 
        make install -f win32/Makefile.gcc DESTDIR=../
    通常Linux系统自带OpenSSL,但是其so文件由于没有debug信息,因此无法跟踪内部函数,对于学习
    不太方便,需要通过源码重新安装。
            我的Linux系统是CentOS7,自带的OpenSSL的版本是1.0.1e。在网上下载了OpenSSL1.0.1f后,通过
    如下方法安装
    [html] view plain copy
     
    
        ./config --prefix=/usr/local --openssldir=/usr/local/ssl    
        make && make install    
        ./config -d shared --prefix=/usr/local --openssldir=/usr/local/ssl    
        make clean    
        make && make install    
    
    
            先安装静态库版本,再安装动态库版本。安装目录为/usr/local下。安装动态库时增加-d选项,因为
    调试时使用动态库,需要跟踪代码。
            这样后面就可以写调试代码调试,如下面的例子:
    
    #include <stdio.h>
    #include <string.h>
    #include <openssl/bio.h>
    int main()
    {
    BIO *b = NULL;
    int len = 0;
    char *out = NULL;
    b = BIO_new(BIO_s_mem());
     
    if (NULL == b)
    {
    return 0;
    }
     
    len = BIO_write(b,"openssl",4);
    len = BIO_printf(b,"%s","zcp");
    len = BIO_ctrl_pending(b);
     
    out = (char *)OPENSSL_malloc(len);
    if (NULL == out)
    {
    return 0;
    }
    memset(out, 0, len);
     
    len = BIO_read(b,out,len);
    printf("out is : %s
    ",out);
     
    OPENSSL_free(out);
    BIO_free(b);
    return 0;
    }
        在当前路径下创建一个新的动态库软链接:
        ln -s /usr/local/lib64/libcrypto.so.1.0.0  libcrypto.so.10
       然后gcc编译时指明使用这个libcrypto:
        gcc -g -DDEBUG -o openssl_mem_bio_test openssl_mem_bio_test.c -lcrypto -Wl,-rpath=.
    View Code
    问题1
     
    子模组 'boringssl'(https://boringssl.googlesource.com/boringssl)已对路径 'boringssl' 注册
    子模组 'krb5'(https://github.com/krb5/krb5)已对路径 'krb5' 注册
    子模组 'pyca.cryptography'(https://github.com/pyca/cryptography.git)已对路径 'pyca-cryptography' 注册
    正克隆到 '/d/2017-2019/2018-11-05-500G/ubuntu/iproject/openssl/openssl/boringssl'...
    fatal: 无法访问 'https://boringssl.googlesource.com/boringssl/':Connection timed out after 300002 milliseconds
    fatal: 无法克隆 'https://boringssl.googlesource.com/boringssl' 到子模组路径 '/d/2017-2019/2018-11-05-500G/ubuntu/iproject/openssl/openssl/boringssl'
    克隆 'boringssl' 失败。按计划重试
    正克隆到 '/d/2017-2019/2018-11-05-500G/ubuntu/iproject/openssl/openssl/krb5'...
     
    谷歌上不去 自己想办法
    问题2

    execvp:printf: Argument list too long

    getconf ARG_MAX
    xargs --show-limits 
    里面提到了使用xargs --show-limits 可以查看系统中对于参数长度的限制
    http://www.voidcn.com/article/p-wlonaiui-p.html
    如果使用Linux内核是足够你可以简单的做
    ulimit -s 100000

    将工作,因为Linux内核在10年前有一个补丁,改变参数限制基于堆栈大小: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b6a2fea39318e43fee84fa7b0b90d68bed92d2ba

    更新:如果你觉得勇敢,你可以说

    ulimit -s unlimited

    与任何shell扩展,你会没事的,只要你有足够的内存。

    这是一个黑客。 你知道怎么设置堆栈限制吗? 这也会影响其他进程开始在同一个会话。

    是的,这是一个黑客。 大多数时候这种黑客是一次性(多长时间你手动移动大量的文件呢?)。 如果你确定这个过程不会吃你所有的内存,你可以设置

    ulimit - s无限 实际的命令行限制是2 ^ 31日或2 GB。 ( MAX_ARG_STRLEN 在内核源代码)。

    https://unix.stackexchange.com/questions/128559/solving-mv-argument-list-too-long

    文献https://github.com/imyller/meta-nodejs/issues/9

    源码移动到 C:msys64homefreemopenssl
     问题依旧。待解决 
     
     perl util/mkbuildinf.pl "gcc -m64 -Wall -O3 -DL_ENDIAN -DOPENSSL_PIC -DUNICODE -D_UNICODE -DWIN32_LEAN_AND_MEAN -D_MT -DNDEBUG" "mingw64" >
    perl的锅??
     make build_modules_nodep 能生成 libssl-3-x64.dll  libcrypto-3-x64.dll
     
    不需要的算法配置
     
    Ciphers:
    
    no-idea       -DOPENSSL_NO_IDEA
    no-aes        -DOPENSSL_NO_AES
    no-camellia   -DOPENSSL_NO_CAMELLIA
    no-seed       -DOPENSSL_NO_SEED
    no-bf         -DOPENSSL_NO_BF
    no-cast       -DOPENSSL_NO_CAST
    no-des        -DOPENSSL_NO_DES
    no-rc2        -DOPENSSL_NO_RC2
    no-rc4        -DOPENSSL_NO_RC4
    no-rc5        -DOPENSSL_NO_RC5
    
    no-md2        -DOPENSSL_NO_MD2
    no-md4        -DOPENSSL_NO_MD4
    no-md5        -DOPENSSL_NO_MD5
    no-sha        -DOPENSSL_NO_SHA
    no-ripemd     -DOPENSSL_NO_RIPEMD
    no-mdc2       -DOPENSSL_NO_MDC2
    
    no-rsa        -DOPENSSL_NO_RSA
    no-dsa        -DOPENSSL_NO_DSA
    no-dh         -DOPENSSL_NO_DH
    
    no-ec         -DOPENSSL_NO_EC
    no-ecdsa      -DOPENSSL_NO_ECDSA
    no-ecdh       -DOPENSSL_NO_ECDH
    
    Non-cipher functionality:
    
    no-sock       -DOPENSSL_NO_SOCK         No socket code.
    no-ssl2       -DOPENSSL_NO_SSL2         No SSLv2.
    no-ssl3       -DOPENSSL_NO_SSL3         No SSLv3.
    no-err        -DOPENSSL_NO_ERR          No error strings.
    no-krb5       -DOPENSSL_NO_KRB5         No Kerberos v5.
    no-engine     -DOPENSSL_NO_ENGINE       No dynamic engines.
    no-hw         -DOPENSSL_NO_HW           No support for external hardware.
    
    Not documented:
    
    no-tlsext     -DOPENSSL_NO_TLSEXT
    no-cms        -DOPENSSL_NO_CMS
    no-jpake      -DOPENSSL_NO_JPAKE
    no-capieng    -DOPENSSL_NO_CAPIENG
    ./config no-idea no-aes no-camellia no-seed no-bf no-cast no-des no-rc2 no-rc4 no-rc5 
    no-md2 no-md4 no-ripemd no-mdc2 no-rsa no-dsa no-dh no-ec no-ecdsa no-ecdh no-sock 
    no-ssl2 no-ssl3 no-err no-krb5 no-engine no-hw
    make depend
    make build_crypto
     
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
    x1
    >>
    O
    x1
  • 相关阅读:
    P2590 [ZJOI2008]树的统计(树链剖分)
    【算法】线性排序
    【LeetCode每天一题】Median of Two Sorted Arrays(两数组中的中位数)
    【算法】归并排序
    【LeetCode每天一题】Longest Substring Without Repeating Characters(最长无重复的字串)
    【算法】快排
    【LeetCode每天一题】Add Two Numbers(两链表相加)
    【LeetCode每天一题】Two Sum(两数之和)
    【算法】选择排序
    【算法】插入排序
  • 原文地址:https://www.cnblogs.com/marklove/p/11869327.html
Copyright © 2011-2022 走看看