• zlog 简易手册


    zlog 简易手册

    源码下载

    1. 开发版本

      如果以研究学习为目的,或者希望尝试最新特性,又或者希望参与到 zlog 的开发中,可以直接从 Github 主页上拉取最新源码,拉取命令:

      git clone https://github.com/HardySimpson/zlog.git
      
      • 1

      技巧:在 github 页面点击右上角的 Code 按钮获取 git clone 链接。

    2. 发行版本(建议)

      如果以商用量产为目的,一般选择正式的发行版本。在 Github 主页下载最新的 Release 版本,如 Release 1.2.16 版本,下载后解压缩:

      tar -xvf 1.2.16.tar.gz
      
      • 1

    交叉编译

    zlog 使用 makefile 进行编译,进行交叉编译时需要指定 PATHCCAR 环境变量。由于原始的 makefile 直接写死了 ar,所以在进行交叉编译前需要改造一下 makefile 文件,以达到正确调用交叉编译器的 ar 程序。

    在 makefile 第 47 行,增加 AR 环境变量的定义:

    AR?=ar
    STLIB_MAKE_CMD=$(AR) rcs $(STLIBNAME)
    
    • 1
    • 2

    执行编译:

    export PATH=$PATH:/toolchains/aarch64--glibc--stable-2022.03-1/bin
    export CC=aarch64-linux-gcc
    export AR=aarch64-linux-ar
    export DEBUG=
    export PREFIX=$(pwd)/output
    make
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    说明:

    • 1 行将交叉编译器的执行路径加入 PATH 环境变量
    • 2 行配置 CC 变量指定交叉编译器的名称
    • 3 行配置 AR 变量指定交叉编译器的静态库打包工具
    • 4 行配置 DEBUG 变量为空,即编译时不带 -g 选项
    • 5 行配置 PREFIX 变量指定编译产物所存放的位置
    • 6 行执行 make 命令进行编译
    • 7 行执行 make install 命令将编译产物放置到 PREFIX 指定的路径

    QNX 7.1 交叉编译

    提示:文章结尾有 github 路径。

    源码修改

    1. 修改 fmacros.h 文件,在文件第 6 行增加 _QNX_ 宏定义判断:

      #if defined(__linux__) || defined(__OpenBSD__) || defined(_AIX) || defined(_QNX_)
      
      • 1
    2. 修改 event.h 文件,修改第 70 行的宏定义判断:

      #if defined __linux__ || __APPLE__ || _QNX_
      
      • 1
    3. 修改 event.c 文件,在头文件引用部分根据宏定义进行判断:

      #ifdef _QNX_
      #include 
      #else
      #include 
      #endif
      
      • 1
      • 2
      • 3
      • 4
      • 5

      97 行增加判断,因为在 QNX 系统中是使用 gettid() 函数获取线程的唯一 ID 值:

      #ifdef __linux__
          a_event->ktid = syscall(SYS_gettid);
      #elif _QNX_
          a_event->ktid = gettid();
      #elif __APPLE__
          uint64_t tid64;
          pthread_threadid_np(NULL, &tid64);
          a_event->tid = (pthread_t)tid64;
      #endif
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      107 行增加 _QNX 宏定义判断:

      #if defined __linux__ || __APPLE__ || _QNX_
      
      • 1

    Makefile 修改

    zlog 的 makefile 文件主要是针对 gcc 编译器而设计的,当使用 qnx 的编译 qcc 进行编译时,有些库以及宏定义的使用需要进行调整。

    1. 移除在 37 行与 38 行的 -pthread 定义,默认情况下,QNX 的编译器 qcc 自带了 pthread 库,不需要额外链接。

    编译流程

    1. 假如 QNX 7.1 SDP 的路径为 /work/sdk/qnx710,使用 source 命令让 qnx 环境变量生效:

      source /work/sdk/qnx710/qnxsdp-env.sh
      
      • 1
    2. qcc 添加到 $PATH 环境变量:

      export PATH=$PATH:$QNX_HOST/usr/bin
      
      • 1
    3. 配置 CC 环境变量的值,默认为 gcc,需要修改成 qcc:

      export CC=qcc
      
      • 1
    4. 配置 CFLAGSLDFLAGS 变量,增加 qnx 的特定配置:

      export CFLAGS="-Vgcc/8.3.0,gcc_ntoaarch64le -D_QNX_SOURCE -D_QNX_"
      export LDFLAGS=-Vgcc/8.3.0,gcc_ntoaarch64le
      
      • 1
      • 2
    5. 编译非 Debug 版本:

      export DEBUG=
      
      • 1
    6. 配置 PREFIX 变量指定编译产物所存放的位置:

      export PREFIX=$(pwd)/output
      
      • 1

    所有配置可汇总成以下脚本 qnx_build.sh

    #!/bin/bash
    
    source /work/sdk/qnx710/qnxsdp-env.sh
    export PATH=$PATH:$QNX_HOST/usr/bin
    export CC=qcc
    export CFLAGS="-Vgcc/8.3.0,gcc_ntoaarch64le -D_QNX_SOURCE -D_QNX_"
    export LDFLAGS=-Vgcc/8.3.0,gcc_ntoaarch64le
    export DEBUG=
    export PREFIX=$(pwd)/output
    make
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    以上所有的修改我从 Github 上 fork 了一份到我的个人仓库,并已将修改后的源码进行开源,可以拉取 qnx_1.2.16 分支进行查阅或编译:

    git clone -b qnx_1.2.16 https://github.com/i-black-angel/zlog.git
    
    • 1

    网址: qnx_1.2.16

    欢迎关注我的公众号:飞翔的小黄鸭
    也许会发现不一样的风景

  • 相关阅读:
    TCP三次握手四次挥手简介
    OPC UA:工业领域的“HTML”
    平面设计师资格证怎么考
    Shell 实现文件基本操作(sed-编辑、awk-匹配)
    从数据仓库到数据湖、湖仓一体:概念溯源分析底层逻辑
    基于ASP.NET+MYSQL的医院信息管理系统
    JavaCV人脸识别三部曲之三:识别和预览
    面试失败的反思:如何从错误中吸取教训
    JAVA大学生规划平台计算机毕业设计Mybatis+系统+数据库+调试部署
    Java 反射reflect.Array类简介说明
  • 原文地址:https://blog.csdn.net/bluebird_shao/article/details/127637849