• Linux aarch64交叉编译之cJSON解析器


    对于cJSON项目的交叉编译,该项目难度并不大,灵活性也较强。该文章的目标是编译一套aarch64 Linux Debian嵌入式版本上可以运行的版本库,基本无坑。老套路,先把linux桌面版搞好,然后 移植到嵌入式Linux Debian 板子上。

    1 cJSON简介

    cJSON是一种JSON格式的解析库,其主要功能就是构建(封装)和解析(解封装) Json 格式,实现非常简洁,核心只有2个文件,一个cJSON.c文件,一个cJSON.h头文件。

    关于JSON如果想有更多了解可查看:

    2 Linux 本地编译 & 交叉编译

    2.1 Linux(ubuntu20.04)上cJSON的编译

    cJSON编译还是很方便的,直接上:

    1. make
    2. make DESTDIR=$PWD/out_x86_64 install

    最后生成内容为:

    1. └── usr
    2. └── local
    3. ├── include
    4. │   └── cjson
    5. │   ├── cJSON.h
    6. │   └── cJSON_Utils.h
    7. └── lib
    8. ├── libcjson.so -> libcjson.so.1
    9. ├── libcjson.so.1 -> libcjson.so.1.7.15
    10. ├── libcjson.so.1.7.15
    11. ├── libcjson_utils.so -> libcjson_utils.so.1
    12. ├── libcjson_utils.so.1 -> libcjson_utils.so.1.7.15
    13. └── libcjson_utils.so.1.7.15

    2.2 aarch64交叉编译与移植

    因为是用aarch64交叉编译,需要提前配置环境,安装如下软件:

    1. sudo apt install binutils-aarch64-linux-gnu-dbg binutils-aarch64-linux-gnu cpp-aarch64-linux-gnu \
    2. g++-10-aarch64-linux-gnu g++-9-aarch64-linux-gnu g++-aarch64-linux-gnu g++ \
    3. gcc-10-aarch64-linux-gnu-base gcc-9-aarch64-linux-gnu-base gcc-aarch64-linux-gnu \
    4. pkg-config-aarch64-linux-gnu qemu-efi-aarch64 gcc arch-test

    对于cJSON的交叉编译就简单很多了,只需要执行:

    1. make CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++
    2. make DESTDIR=$PWD/out_aarch64 install

    最后生成内容与PC相同。

    2.3 优化和自定义cJSON Project

    一般情况下,关于定制,我们用到和修改的文件也就是以下几个:

    1. ├── cJSON.cpp
    2. ├── cJSON.h
    3. ├── cJSON_Utils.cpp
    4. ├── cJSON_Utils.h
    5. └── CMakeLists.txt

    那么我们可以自定义CMakeLists.txt文件,内容如下:

    1. cmake_minimum_required(VERSION 3.4.1)
    2. project(cJSON)
    3. add_library(cJSON SHARED cJSON.cpp cJSON_Utils.cpp)
    4. target_include_directories(cJSON PUBLIC .)

    然后开始使用cmake进行编译,如下所示:

    1. #PC Linux X86 / X86_64 编译
    2. mkdir build
    3. cd build
    4. cmake ..
    5. make
    6. #嵌入式Linux debian11 aarch64
    7. mkdir build
    8. cd build
    9. CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake ..
    10. make

    当然这里Header文件还是需要单独拷贝出去的。

  • 相关阅读:
    【JavaEE初阶】文件操作 和 IO (下篇)
    linuxbingc(多线程)
    删除的文件夹不在回收站中如何恢复呢?
    魔百盒M301H_JL代工_ADB可自由开关_强刷固件(可救砖)
    【电商项目实战】新增收货地址(详细篇)
    安化云台山又添一新的打卡点——星空露营公园
    在 ASP.NET Core 应用程序中,Program.cs、Startup.cs 和 Module.cs区别作用
    谈一谈AI对人工的取代
    提高数据科学工作效率的 8 个Python库!
    BGP学习笔记
  • 原文地址:https://blog.csdn.net/vviccc/article/details/126304988