交叉编译 cJSON

交叉编译 cJSON

概述

JSON 是一种轻量级数据交换格式。它可以表示数据、字符串、有序的值序列以及名称/值对的集合。

cJSON 是 ANSI C 中超轻量级的 JSON 解析器。cJSON 旨在成为您可以完成任务的最简单的解析器。它是一个 C 文件和一个头文件。作为一个库,cJSON 的存在是为了尽可能地减少跑腿活儿的工作,但不会妨碍您的工作。作为实用主义的观点(即忽略事实),我想说,你可以在两种模式中使用它:自动和手动。

有几种方法可以将cJSON合并到项目中。

因为整个库只有一个 C 文件和一个头文件,所以您只需将 cJSON.hcJSON.c 复制到项目源代码并开始使用它。

cJSON 是用 ANSI C(C89)编写的,以支持尽可能多的平台和编译器。

  • GitHub: https://github.com/DaveGamble/cJSON

交叉编译 cJSON_第1张图片

下载

开发版本 (最新)

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

git clone https://github.com/DaveGamble/cJSON.git

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

发行版本

如果以商用量产为目的,一般选择正式的发行版本为佳。在 cJSON 的 Release 页面,源码以压缩包的形式提供,根据需求选择合适的版本进行下载,以最新的 1.7.15 为例,下载源码包 Source Code (tar.gz).

也可以直接使用 wget 命令下载:

wget https://github.com/DaveGamble/cJSON/archive/refs/tags/v1.7.15.tar.gz

交叉编译

解压缩源码包,如果使用 git clone 拉回来的代码可以忽略这一步

tar -xvf v1.7.15.tar.gz

解压缩源码包之后可以先阅读 README.md 文档,里面有关于使用 cmake 工具构建 cJSON 的相关信息。

cJSON 使用了 CMake 编译系统,需要保证系统中已经安装了 cmake 工具。可以使用 apt 命令进行安装:

sudo apt install -y cmake

创建一个环境配置文件 aarch64-environment-setup,配置最重要的交叉编译环境变量。

aarch64-environment-setup:

export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2022.03-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATH

export PREFIX=/usr

export CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-strip

export PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig

在本示例中,交叉编译工具位于 /opt/toolchains/aarch64--glibc--stable-2022.03-1/bin 目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CCCXXCPPLD 环境变量时指定 --sysroot=

参数让交叉编译器搜索 dir 目录下的头文件与库文件,而不是 /usr/include/usr/lib

source aarch64-environment-setup
mkdir build
cd build
cmake .. -DENABLE_CJSON_UTILS=On -DENABLE_CJSON_TEST=Off -DCMAKE_INSTALL_PREFIX=/usr
make
make DESTDIR=$BUILDSYSROOT install
  • 在源码目录下创建环境设置文件并调用 source 命令让环境变量生效
  • 创建临时构建目录 build,避免在源码目录产生编译中间文件
  • 切换到 build 目录
  • 执行 cmake 命令,同时按照 README.md 文档说明配置 ENABLE_CJSON_UTILSENABLE_CJSON_TEST 参数的值,并指定 CMAKE_INSTALL_PREFIX 安装路径
  • 执行 make 命令编译源码
  • 使用 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,在本示例中,BUILDSYSROOT 指的是交叉编译工具链的 sysroot 目录,此环境变量在 aarch64-environment-setup 中已定义。更详细介绍可以参考 DESTDIR 官方介绍,也可以参考我的博文《交叉编译 libcap》关于 DESTDIR 的用法说明。

最终你就可以在 $BUILDSYSROOT/usr 文件夹中找到交叉编译好的 cJSON 的头文件及库文件。Good luck.

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


△ \triangle 交叉编译 SQLite

你可能感兴趣的:(交叉编译,git,github,json)