对于cJSON项目的交叉编译,该项目难度并不大,灵活性也较强。该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库,基本无坑。老套路,先把linux桌面版搞好,然后 移植到嵌入式Linux Debian 板子上。
cJSON是一种JSON格式的解析库,其主要功能就是构建(封装)和解析(解封装) Json 格式,实现非常简洁,核心只有2个文件,一个cJSON.c文件,一个cJSON.h头文件。
关于JSON如果想有更多了解可查看:
cJSON编译还是很方便的,直接上:
- make
- make DESTDIR=$PWD/out_x86_64 install
最后生成内容为:
- └── usr
- └── local
- ├── include
- │ └── cjson
- │ ├── cJSON.h
- │ └── cJSON_Utils.h
- └── lib
- ├── libcjson.so -> libcjson.so.1
- ├── libcjson.so.1 -> libcjson.so.1.7.15
- ├── libcjson.so.1.7.15
- ├── libcjson_utils.so -> libcjson_utils.so.1
- ├── libcjson_utils.so.1 -> libcjson_utils.so.1.7.15
- └── libcjson_utils.so.1.7.15
因为是用aarch64交叉编译,需要提前配置环境,安装如下软件:
- sudo apt install binutils-aarch64-linux-gnu-dbg binutils-aarch64-linux-gnu cpp-aarch64-linux-gnu \
- g++-10-aarch64-linux-gnu g++-9-aarch64-linux-gnu g++-aarch64-linux-gnu g++ \
- gcc-10-aarch64-linux-gnu-base gcc-9-aarch64-linux-gnu-base gcc-aarch64-linux-gnu \
- pkg-config-aarch64-linux-gnu qemu-efi-aarch64 gcc arch-test
对于cJSON的交叉编译就简单很多了,只需要执行:
- make CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++
- make DESTDIR=$PWD/out_aarch64 install
最后生成内容与PC相同。
一般情况下,关于定制,我们用到和修改的文件也就是以下几个:
- ├── cJSON.cpp
- ├── cJSON.h
- ├── cJSON_Utils.cpp
- ├── cJSON_Utils.h
- └── CMakeLists.txt
那么我们可以自定义CMakeLists.txt文件,内容如下:
- cmake_minimum_required(VERSION 3.4.1)
- project(cJSON)
- add_library(cJSON SHARED cJSON.cpp cJSON_Utils.cpp)
- target_include_directories(cJSON PUBLIC .)
然后开始使用cmake进行编译,如下所示:
- #PC Linux X86 / X86_64 编译
- mkdir build
- cd build
- cmake ..
- make
-
- #嵌入式Linux debian11 aarch64
- mkdir build
- cd build
- CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake ..
- make
当然这里Header文件还是需要单独拷贝出去的。