开发版本
如果以研究学习为目的,或者希望尝试最新特性,又或者希望参与到 zlog 的开发中,可以直接从 Github 主页上拉取最新源码,拉取命令:
git clone https://github.com/HardySimpson/zlog.git
技巧:在 github 页面点击右上角的
Code
按钮获取 git clone 链接。
发行版本(建议)
如果以商用量产为目的,一般选择正式的发行版本。在 Github 主页下载最新的 Release 版本,如 Release 1.2.16 版本,下载后解压缩:
tar -xvf 1.2.16.tar.gz
zlog 使用 makefile 进行编译,进行交叉编译时需要指定 PATH
、CC
、AR
环境变量。由于原始的 makefile 直接写死了 ar
,所以在进行交叉编译前需要改造一下 makefile 文件,以达到正确调用交叉编译器的 ar
程序。
在 makefile 第 47 行,增加 AR
环境变量的定义:
AR?=ar
STLIB_MAKE_CMD=$(AR) rcs $(STLIBNAME)
执行编译:
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
说明:
PATH
环境变量CC
变量指定交叉编译器的名称AR
变量指定交叉编译器的静态库打包工具DEBUG
变量为空,即编译时不带 -g
选项PREFIX
变量指定编译产物所存放的位置make
命令进行编译make install
命令将编译产物放置到 PREFIX
指定的路径提示:文章结尾有 github 路径。
修改 fmacros.h
文件,在文件第 6 行增加 _QNX_
宏定义判断:
#if defined(__linux__) || defined(__OpenBSD__) || defined(_AIX) || defined(_QNX_)
修改 event.h
文件,修改第 70 行的宏定义判断:
#if defined __linux__ || __APPLE__ || _QNX_
修改 event.c
文件,在头文件引用部分根据宏定义进行判断:
#ifdef _QNX_
#include <sys/process.h>
#else
#include <sys/syscall.h>
#endif
在 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
在 107 行增加 _QNX
宏定义判断:
#if defined __linux__ || __APPLE__ || _QNX_
zlog 的 makefile 文件主要是针对 gcc 编译器而设计的,当使用 qnx 的编译 qcc 进行编译时,有些库以及宏定义的使用需要进行调整。
-pthread
定义,默认情况下,QNX 的编译器 qcc
自带了 pthread 库,不需要额外链接。假如 QNX 7.1 SDP 的路径为 /work/sdk/qnx710
,使用 source
命令让 qnx 环境变量生效:
source /work/sdk/qnx710/qnxsdp-env.sh
将 qcc
添加到 $PATH
环境变量:
export PATH=$PATH:$QNX_HOST/usr/bin
配置 CC
环境变量的值,默认为 gcc
,需要修改成 qcc
:
export CC=qcc
配置 CFLAGS
与 LDFLAGS
变量,增加 qnx 的特定配置:
export CFLAGS="-Vgcc/8.3.0,gcc_ntoaarch64le -D_QNX_SOURCE -D_QNX_"
export LDFLAGS=-Vgcc/8.3.0,gcc_ntoaarch64le
编译非 Debug 版本:
export DEBUG=
配置 PREFIX
变量指定编译产物所存放的位置:
export PREFIX=$(pwd)/output
所有配置可汇总成以下脚本 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
以上所有的修改我从 Github 上 fork 了一份到我的个人仓库,并已将修改后的源码进行开源,可以拉取 qnx_1.2.16 分支进行查阅或编译:
git clone -b qnx_1.2.16 https://github.com/i-black-angel/zlog.git
网址: qnx_1.2.16
欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景