zoukankan      html  css  js  c++  java
  • 七牛云ARM64交叉编译流程

    前些时间遇到七牛云第三方编译问题,现把整个流程记录如下,供大家参考.

    我们使用的开发板是周立功的m1808,核心是rk1808.环境在Vmware的linux下面

     一.编译依赖库curl

    百度云下载链接:

    链接:https://pan.baidu.com/s/1J-hKk4Pce9gf5rBcqcOtYw 
    提取码:pkgb 
    

    1.下载源文件到本地

    2.解压文件到当前目录

    tar xvf curl-7.58.0.tar.xz 
    

     

    3.进入目录curl-xxx,创建build文件夹

    mkdir build
    cd build
    

    4.加载第三方编译链的目录环境变量

    export PATH=$PATH:/opt/zlg/m1808-sdk-v1.3.1-ga/host/bin  //加载aarch64-linux-gnu目录
    

     我们的编译链接版本是 

    #aarch64-linux-gnu-gcc -v
    使用内建 specs。
    COLLECT_GCC=/opt/zlg/m1808-sdk-v1.3.1-ga_2020.12.31/host/../gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
    COLLECT_LTO_WRAPPER=/opt/zlg/m1808-sdk-v1.3.1-ga_2020.12.31/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/6.3.1/lto-wrapper
    目标:aarch64-linux-gnu
    配置为:'/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-6.3-2017.05/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-arch=armv8-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=aarch64-linux-gnu --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
    线程模型:posix
    gcc 版本 6.3.1 20170404 (Linaro GCC 6.3-2017.05) 
    

     

    5.检测配置并编译源码

    参数解释:
    【–host】:就是用【config.guess】获取的;
    【CC】【CXX】:交叉编译工具链gcc和g++名称;
    【–with-protoc】:已经编译好的主机平台protoc二进制文件路径;
    【–prefix】:交叉编译后安装目录。
    

      

    ../configure --host=aarch64-linux-gnu --prefix=/usr
    make
    make install DESTDIR=/home/zlgmcu/Desktop/curl-7.58.0/build/output //此处为实际的目录
    

     

      

    6.安装到指定目录

    make install DESTDIR=/home/zlgmcu/Desktop/curl-7.58.0/build/output
    

    至此,libcurl 编译完成 

    7.完整命令如下(重要)

    tar -xvf curl-7.58.0.tar.xz 
    cd curl-7.58.0
    mkdir build
    export PATH=$PATH:/opt/zlg/m1808-sdk-v1.3.1-ga/host/bin  //加载aarch64-linux-gnu目录
    ../configure --host=aarch64-linux-gnu --prefix=/usr
    make
    make install DESTDIR=/home/zlgmcu/Desktop/curl-7.58.0/build/output //此处为实际的目录


    二、交叉编译七牛云库

    1.下载代码到本地

    git clone https://github.com/qiniu/c-sdkv

    如果网速不好也可以用我们提供的国内镜像

    git clone https://gitee.com/cqnews/c-sdk 

    2.编写Makefile文件

    INCLUDE_PATH=-Ibase64 -IcJSON -Iqiniu
    
    SOURCE_FILES=
        b64/b64.c
        b64/urlsafe_b64.c
        cJSON/cJSON.c
        qiniu/auth_mac.c
        qiniu/base.c
        qiniu/base_io.c
        qiniu/cdn.c
        qiniu/conf.c
        qiniu/fop.c
        qiniu/http.c
        qiniu/io.c
        qiniu/macro.h
        qiniu/qetag.c
        qiniu/reader.c
        qiniu/resumable_io.c
        qiniu/rs.c
        qiniu/tm.c
    
    
    all: $(SOURCE_FILES)
    aarch64-linux-gnu-gcc -g -c -fPIC $^ $(INCLUDE_PATH) -lcurl -lcrypto -lssl -lm

    3.编译目标文件

    make
    

     上面的Makefile是把所有代码编译为.o目标文件

     4.使用工具ar打包为静态库

    ar rcs libqiniu.a *.o
    

     5.基于.o文件构建动态库

    aarch64-linux-gnu-gcc -shared -o libqiniu.so *.o -lcurl -lcrypto -lssl -lm

     6.最终得到的构建完毕的发布包

    .
    ├── include
    │   ├── b64
    │   │   ├── b64.h
    │   │   └── urlsafe_b64.h
    │   ├── cJSON
    │   │   └── cJSON.h
    │   └── qiniu
    │       ├── base.h
    │       ├── cdn.h
    │       ├── conf.h
    │       ├── fop.h
    │       ├── http.h
    │       ├── io.h
    │       ├── macro.h
    │       ├── qetag.h
    │       ├── reader.h
    │       ├── region.h
    │       ├── resumable_io.h
    │       ├── rs.h
    │       └── tm.h
    └── lib
        ├── libqiniu.a
        └── libqiniu.so
    
  • 相关阅读:
    js 获取asp.net TextBox值
    项目笔记一
    如何取GridView中隐藏列的值
    使用bablepolyfill
    border: 0.5px
    选择查询固定位置的数据
    SQL用户数据库权限设置
    Java.1 HelloWorld的分析
    Java.2 面向对象
    【drupal实践】windows下drupal7.22develop版本安装
  • 原文地址:https://www.cnblogs.com/cqwo/p/14606883.html
Copyright © 2011-2022 走看看