imx8 交叉编译jq

本文介绍如何从GitHub下载jq源码并进行定制化的编译流程,包括应用补丁(patch)和指定编译参数等步骤。此外,还提供了jq常用命令示例,帮助读者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载 jq
git clone https://github.com/stedolan/jq.git

打 patch
cd jq
patch -p1 < ../jq.patch

编译
. /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
make

jq.patch 文件如下

diff -uprN jq-old/Makefile jq-new/Makefile
--- jq-old/Makefile	1970-01-01 08:00:00.000000000 +0800
+++ jq-new/Makefile	2021-01-30 13:58:23.709740712 +0800
@@ -0,0 +1,39 @@
+SDKTARGETSYSROOT=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux
+CC  = aarch64-poky-linux-gcc --sysroot=$(SDKTARGETSYSROOT)
+CXX = aarch64-poky-linux-g++ --sysroot=$(SDKTARGETSYSROOT)
+LD  = aarch64-poky-linux-ld  --sysroot=$(SDKTARGETSYSROOT)
+AR  = aarch64-poky-linux-ar
+
+export INCLUDE=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/include
+export C_INCLUDE_PATH=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/include
+export CPLUS_INCLUDE_PATH=/opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/include
+
+LIBJQ_SRC = src/builtin.c src/bytecode.c src/compile.c src/execute.c    \
+        src/jq_test.c src/jv.c src/jv_alloc.c src/jv_aux.c              \
+        src/jv_dtoa.c src/jv_file.c src/jv_parse.c src/jv_print.c       \
+        src/jv_unicode.c src/linker.c src/locfile.c src/util.c          \
+        src/decNumber/decContext.c src/decNumber/decNumber.c            \
+        src/jv_dtoa_tsd.c src/lexer.c src/parser.c src/main.c
+
+CFLAGS = -I./ -Wextra -Wall -Wno-missing-field-initializers             \
+        -Wno-unused-parameter -Wno-unused-function                      \
+        -DHAVE_STRPTIME -DIEEE_8087
+
+bin_PROGRAMS = src/jq
+
+ver="`{ ./scripts/version || echo '$(VERSION)' ; } | sed 's/.*/\#define JQ_VERSION \"&\"/'`"
+
+default: clean
+	echo "$(ver)" > src/version.h
+	sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/\\n"/' ./src/builtin.jq > src/builtin.inc
+	make build
+
+build: $(LIBJQ_SRC:.c=.o)
+	$(CC) -o $(bin_PROGRAMS) $(LIBJQ_SRC:.c=.o) -lm -lpthread
+
+install:
+	cp -f $(bin_PROGRAMS)  ../../../customer/bin/
+
+clean:
+	rm -f $(bin_PROGRAMS) $(LIBJQ_SRC:.c=.o)
+
diff -uprN jq-old/src/builtin.c jq-new/src/builtin.c
--- jq-old/src/builtin.c	2021-01-30 09:32:07.000000000 +0800
+++ jq-new/src/builtin.c	2021-01-30 13:33:39.244479198 +0800
@@ -1,4 +1,4 @@
-#define _BSD_SOURCE
+#define _DEFAULT_SOURCE
 #define _GNU_SOURCE
 #ifndef __sun__
 # define _XOPEN_SOURCE

用法,参考
https://www.ibm.com/developerworks/cn/linux/1612_chengg_jq/index.html

假如有一个xxx.json文件内容如下:
{
    "Age": 25,
    "Email": {
        "Google": "san.zhang@gmail.com",
        "QQ": "zhangsan@qq.com"
    },
    "Industry": "IT",
    "Language": [
        "C",
        "C++"
    ],
    "Name": "Zhangsan"
}

打印整个json文件的内容:
    jq -r '.' xxx.json
查询某个key的值:
    jq -r '.Age' xxx.json
    jq -r '.Email' xxx.json
    jq -r '.Industry' xxx.json
    jq -r '.Language' xxx.json
    jq -r '.Name' xxx.json
查询某个嵌套key的值:
    jq -r '.Email|.Google' xxx.json
    或
    jq -r '.Email.Google' xxx.json
查询某个数组的值:
    jq -r '.Language.[1]' xxx.json
    或
    jq -r '.Language[1]' xxx.json
设置某个key的值(不会改写xxx.json的内容, 仅仅是标准输出):
    整数: jq --argjson v 26 '.Age=$v' xxx.json
    字符串: jq --arg v "si.li@gmail.com" '.Email.Google=$v' xxx.json
    字符串: jq --arg v "education" '.Industry=$v' xxx.json
    字符串: jq --arg v "Java" '.Language[0]=$v' xxx.json
    字符串: jq --arg v "si.li" '.Name=$v' xxx.json

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cfl927096306

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值