暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Linux】x86_64 ubuntu16虚拟机交叉编译Mips64el平台软件

hCodeisDawn 2021-09-16
3670

概述:

    本文以dwncs项目为示例,简述x86_64 ubuntu16虚拟机中交叉编译Mips64el目标机的可执行文件。本文主要叙述系统环境、交叉编译器搭建、项目依赖库编译、项目编译、缺陷等五个部分(文档用于个人记录,某些细节说明不到位)。


一、系统环境

1、开发环境


2、目标环境

注:此处需注意目标机属性Byte Order,此处为Little Endian(小端模式)


二、区分:mips、mipsel、mips64、mips64el

    mips:32位大端字节序

    mipsel:32位小端字节序

    mipsel:是64位大端字节序 

    mips64el:是64位小端字节序


三、交叉编译环境

1、选择交叉编译器

    Architecture:mips64 -> x64

    Byte Order:Little Endian -> el(小端模式)

    故:选择mips64el版本gcc编译器


2、查看mips64el-linux-gcc交叉编译器

    Shell:apt search mips64el-linux


3、安装交叉编译器

    Shell:sudo apt install g++-mips64el-linux-gnuabi64

    Shellsudo apt install gcc-mips64el-linux-gnuabi64


4、测试交叉编译环境


四、依赖库交叉编译

注:dwncs依赖类库

libffi:https://github.com/libffi/libffi

libwebsockets:https://github.com/warmcat/libwebsockets

libjson-c:https://github.com/json-c/json-c

oepnssl:https://github.com/openssl/openssl

libzlog:https://github.com/HardySimpson/zlog

1、json-c

    (1)解压json-c-master.zip(偷懒双击拖出)

    (2)修改CMakeLists.txt文件

    SET(CMAKE_SYSTEM_NAME Linux)
    SET(CMAKE_C_COMPILER "mips64el-linux-gnuabi64-gcc")
    SET(CMAKE_CXX_COMPILER "mips64el-linux-gnuabi64-g++")
    复制

        (3)mkdir build && cd build

        (4)执行cmake

      cmake .. -DCMAKE_INSTALL_PREFIX=/home/hcy/Public/dev/cross-complie/mips64el/json-c
      复制

          (5)make && make install

          (6)安装目录


      2、libffi

          (1)解压libffi-3.3.tar.gz文件

          (2)mkdir build && cd build(重复过程不做截图)

          (3)执行configure

        ../configure CC=mips64el-linux-gnuabi64-gcc --enable-shared --prefix=/home/hcy/Public/dev/cross-complie/mips64el/ffi --host=mips64el-linux-gnuabi64
        复制

            (4)make && make install

            (5)安装目录


        3、openssl(version 1.0.2;websockets依赖环境,优先安装)

            (1)解压openssl-OpenSSL_1_0_2-stable.zip文件

            (2)执行config

          ./config no-asm -shared --prefix=/home/hcy/Public/dev/cross-complie/mips64el/openssl
          复制

              (3)修改Makefile文件(修改编译器;删除-m64

              (4)make && make install(openssl编译安装很慢)

              (5)安装目录


          4、websockets

              (1)解压libwebsockets-main.zip文件

              (2)修改CMakeLists.txt文件

            SET(CMAKE_SYSTEM_NAME Linux)
            SET(CMAKE_C_COMPILER "mips64el-linux-gnuabi64-gcc")
            SET(CMAKE_CXX_COMPILER "mips64el-linux-gnuabi64-g++")
            复制

                (3)mkdir build && cd build

                (4)执行cmake(设置openssl头文件及类库目录)

              cmake .. -DCMAKE_INSTALL_PREFIX=/home/hcy/Public/dev/cross-complie/mips64el/websockets \
              -DLWS_OPENSSL_INCLUDE_DIRS=/home/hcy/Public/dev/cross-complie/mips64el/openssl/include \
              -DLWS_OPENSSL_LIBRARIES="/home/hcy/Public/dev/cross-complie/mips64el/openssl/lib/libcrypto.so;/home/hcy/Public/dev/cross-complie/mips64el/openssl/lib/libssl.so;"
              复制

                  (5)make && make install

                  (6)安装目录


              5、zlog(编译失败,后续补全)


              五、项目编译

              1、Makefile构建(指定链接库位置)

              2、注释zlog日志相关代码

              3、清空编译文件

              4、编译更新程序

              5、编译主程序

              6、查看可执行文件

              7、拷贝至目标机测试(其他文件是项目依赖文件)

                  (1)执行环境

                 (2)upgrade

                  (3)dwncs主程序


              六、美中不足

              1、开发机交叉编译环境待整理,目标机版本过多容易混乱

              2、项目Makefile脚本文件待优化

              3、zlog类库编译n次依旧未能成功,没有日志的程序排错异常艰难


              文章转载自hCodeisDawn,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论