libjsoncpp 的编译和交叉编译
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍libjsoncpp 的编译和交叉编译 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
本文未经允许,不得转发!!!
目录
- 🎄一、编译环境
- 🎄二、libjsoncpp的介绍和下载
- ✨2.1 libjsoncpp的介绍
- ✨2.2 libjsoncpp下载
- 🎄三、编译
- 🎄四、交叉编译
- ✨4.1 cmake方式编译
- ✨4.2 直接编译.h、.cpp
- 🎄五、总结
🎄一、编译环境
-
Ubuntu 18.04
$ uname -a Linux virtual-machine 5.4.0-84-generic #94~18.04.1-Ubuntu SMP Thu Aug 26 23:17:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
-
交叉编译器:
海思SS528使用的交叉编译器:aarch64-mix210-linux-g++
,具体信息如下$ aarch64-mix210-linux-g++ -v Using built-in specs. COLLECT_GCC=aarch64-mix210-linux-g++ COLLECT_LTO_WRAPPER=/opt/linux/x86-arm/aarch64-mix210-linux/host_bin/../libexec/gcc/aarch64-linux-gnu/7.3.0/lto-wrapper Target: aarch64-linux-gnu Configured with: /home/pub/software/toolchaines/build/aarch64-mix210-linux/../../open_source/aarch64-mix210-linux_src/gcc-7.3.0/configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=aarch64-linux-gnu --with-arch=armv8-a --prefix=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/aarch64_mix210 --enable-threads --disable-libmudflap -enable-libssp --enable-gold=yes --disable-libstdcxx-pch --disable-multilib --enable-multiarch --with-gnu-as --with-gnu-ld --enable-libgomp --enable-gnu-indirect-function --enable-checking=yes --enable-lto --enable-c99 --enable-long-long --disable-nls --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --enable-shared --with-pkgversion=20220321 --enable-languages=c,c++ --with-headers=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/aarch64_mix210/target/usr/include --with-sysroot=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/aarch64_mix210/target --with-build-sysroot=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/aarch64_mix210/target --with-gmp=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/obj/host-libs/usr --with-mpfr=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/obj/host-libs/usr --with-mpc=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/obj/host-libs/usr --with-build-time-tools=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/aarch64_mix210/aarch64-linux-gnu/bin --libdir=/home/pub/software/toolchaines/build/aarch64-mix210-linux/aarch64_mix210_build_dir/aarch64_mix210/lib --disable-bootstrap --with-system-zlib Thread model: posix gcc version 7.3.0 (20220321)
-
cmake 版本
我使用的这个cmake版本是 3.10.2 的,虽然 libcurl.so 好像有问题,但不影响编译。$ cmake --version cmake: /usr/local/lib/libcurl.so.4: no version information available (required by cmake) cmake version 3.10.2CMake suite maintained and supported by Kitware (kitware.com/cmake).
🎄二、libjsoncpp的介绍和下载
✨2.1 libjsoncpp的介绍
JSON是一种轻量级的数据交换格式。它可以表示数字、字符串、值的有序序列以及名称/值对的集合。
JsonCpp是一个C++库,允许操作JSON值,包括对字符串的序列化和反序列化。它还可以在非序列化/序列化步骤中保留现有注释,使其成为存储用户输入文件的方便格式。
✨2.2 libjsoncpp下载
JsonCpp 目前在 github 上托管。
官方网址:https://github.com/open-source-parsers/jsoncpp
但是连接github官网时,有时候会连接失败,可以到gitcode网址下载代码:
https://gitcode.com/mirrors/open-source-parsers/jsoncpp/tags
我下载的是,1.9.5 的版本:
🎄三、编译
-
1、复制下载的jsoncpp-1.9.5.tar.gz到一个空目录,并解压
tar zxf jsoncpp-1.9.5.tar.gz
-
2、修改CMakeLists.txt,注释的第81行,如下
#include(${CMAKE_CURRENT_SOURCE_DIR}/include/PreventInSourceBuilds.cmake)
避免出现下面错误:
CMake Error at include/PreventInSourceBuilds.cmake:41 (message):Quitting configuration Call Stack (most recent call first):include/PreventInSourceBuilds.cmake:45 (AssureOutOfSourceBuilds)CMakeLists.txt:81 (include)
-
3、使用cmake运行下面命令
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`pwd`/result
-DCMAKE_BUILD_TYPE=Release
:表示构建的是发布版本;
-DCMAKE_INSTALL_PREFIX=
pwd/result
:指定安装目录在当前目录的result
目录。运行成功后,执行
make && make install
,执行成功就会在当前目录生成result
目录,里面就是编译结果。
==注意:==执行过程会出现这个报错:/usr/bin/cmake: /usr/local/lib/libcurl.so.4: no version information available (required by /usr/bin/cmake)
,如果可以正常运行则不必理会该错误。
🎄四、交叉编译
✨4.1 cmake方式编译
-
1、复制下载的jsoncpp-1.9.5.tar.gz到一个空目录,并解压
tar zxf jsoncpp-1.9.5.tar.gz
-
2、修改CMakeLists.txt,注释的第81行,如下
#include(${CMAKE_CURRENT_SOURCE_DIR}/include/PreventInSourceBuilds.cmake)
避免出现下面错误:
CMake Error at include/PreventInSourceBuilds.cmake:41 (message):Quitting configuration Call Stack (most recent call first):include/PreventInSourceBuilds.cmake:45 (AssureOutOfSourceBuilds)CMakeLists.txt:81 (include)
-
3、修改CMakeLists.txt,去掉jsoncpp的测试,因为交叉编译后的可执行文件,在Ubuntu运行会出错,直接不测试。
将CMakeLists.txt的JSONCPP_WITH_TESTS
的ON
改为OFF
option(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON)
改为下面语句:
option(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" OFF)
-
4、使用cmake运行下面命令
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`pwd`/result_mix200 -DCMAKE_C_COMPILER=aarch64-mix210-linux-gcc -DCMAKE_CXX_COMPILER=aarch64-mix210-linux-g++
-DCMAKE_BUILD_TYPE=Release
:表示构建的是发布版本;
-DCMAKE_INSTALL_PREFIX=
pwd/result_mix200
:指定安装目录在当前目录的result
目录。
-DCMAKE_C_COMPILER=aarch64-mix210-linux-gcc
:指定交叉编译工具
-DCMAKE_CXX_COMPILER=aarch64-mix210-linux-g++
:指定交叉编译工具运行成功后,执行
make && make install
,执行成功就会在当前目录生成result_mix200
目录,里面就是编译结果。
✨4.2 直接编译.h、.cpp
libjsoncpp 的源文件其实就只有几个,分别在jsoncpp-1.9.5/include/
、jsoncpp-1.9.5/src/lib_json/*.cpp
,直接编译的方法就是将这些文件复制到一个空目录,使用aarch64-mix210-linux-g++
直接编译,步骤如下:
- 1、复制下载的jsoncpp-1.9.5.tar.gz到一个空目录,并解压
tar zxf jsoncpp-1.9.5.tar.gz
- 2、创建一个目录
compile-jsoncpp-1.9.5
,复制jsoncpp源文件到该目录mkdir compile-jsoncpp-1.9.5/ cp jsoncpp-1.9.5/include/ jsoncpp-1.9.5/src/lib_json/* compile-jsoncpp-1.9.5/ -far
- 3、进入
compile-jsoncpp-1.9.5/
目录,进行交叉编译cd compile-jsoncpp-1.9.5/ aarch64-mix210-linux-g++ -shared -O3 -fPIC *.cpp -I include -o libjsoncpp.so.1.9.5
编译脚本如下:
#! /bin/bashecho "tar zxf jsoncpp-1.9.5.tar.gz"
tar zxf jsoncpp-1.9.5.tar.gzecho "mkdir compile-jsoncpp-1.9.5/"
mkdir compile-jsoncpp-1.9.5/
cp jsoncpp-1.9.5/include/ jsoncpp-1.9.5/src/lib_json/* compile-jsoncpp-1.9.5/ -far
cd compile-jsoncpp-1.9.5/echo "compiling jsoncpp-1.9.5"
aarch64-mix210-linux-g++ -shared -O3 -fPIC *.cpp -I include -o libjsoncpp.so.1.9.5
🎄五、总结
👉本文介绍了jsoncpp的下载和编译,分别使用了cmake和直接编译的方法对jsoncpp进行交叉编译。
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
相关文章:

libjsoncpp 的编译和交叉编译
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

【Unity美术】如何用3DsMax做一个水桶模型
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:Uni…...

如何用一根网线和51单片机做简单门禁[带破解器]
仓库:https://github.com/MartinxMax/Simple_Door 支持原创是您给我的最大动力… 原理 -基础设备代码程序- -Arduino爆破器程序 or 51爆破器程序- 任意选一个都可以用… —Arduino带TFT屏幕——— —51带LCD1602——— 基础设备的最大密码长度是0x7F,因为有一位…...

在 VUE 项目中,使用 Axios 请求数据时,提示跨域,该怎么解决?
在 VUE 项目开发时,遇到个问题,正常设置使用 Axios 库请求数据时,报错提示跨域问题。 那在生产坏境下,该去怎么解决呢? 其可以通过以下几种方式去尝试解决: 1、设置允许跨域请求的响应头 1.1 在响应头中…...

1.【Vue3】前端开发引入、Vue 简介
1. 前端开发引入 1.1 前端开发前置知识 通过之前的学习,已经通过 SpringBoot 和一些三方技术完成了大事件项目的后端开发。接下来开始学习大事件项目的前端开发,前端部分借助两个框架实现: Vue3(一个 JS 框架)基于 …...
一起学习ETCD系列——运维操作之etcdctl使用
文章目录 概要一、命令二、实操2.1、基本操作2.2、watch2.3、租约2.4、分布式锁2.5、角色2.6、用户2.7、认证2.8、集群 概要 本文主要用来总结ETCD客户端ctcdctl的命令操作,在运维过程中可能常常用到的。 一、命令 etcd工具 etcdctl官方命令示例 [roottest etcd…...

Spring Security 存储密码之 JDBC
Spring Security的JdbcDaoImpl实现了UserDetailsService接口,通过使用JDBC提供支持基于用户名和密码的身份验证。 JdbcUserDetailsManager扩展了JdbcDaoImpl,通过UserDetailsManager接口提供UserDetails的管理功能。 当Spring Security配置为接受用户名/密码进行身份验证时,…...

第3章-python深度学习——(波斯美女)
第3章 神经网络入门 本章包括以下内容: 神经网络的核心组件 Keras 简介 建立深度学习工作站 使用神经网络解决基本的分类问题与回归问题 本章的目的是让你开始用神经网络来解决实际问题。你将进一步巩固在第 2 章第一个示例中学到的知识,还会将学到的…...

蓝桥杯备战——4.继电器/蜂鸣器
1.分析原理图 最好自己先去查查138以及ULN2003的使用方法,我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 ,于是573(U9)处于输出跟随输入P0状态,此时若P061,则573输出Q71&am…...
Redis高级特性之地理空间索引
Redis的地理空间索引是一种功能强大的工具,用于存储和查询地理空间数据。这个特性主要通过Redis的地理空间数据类型 - GeoSet(地理集合)来实现。在这篇文章中,我们将探索Redis地理空间数据类型的使用和应用。 1. Redis GeoSet 简…...

R语言【taxlist】——as():将 taxlist 对象强制转换为 list 对象
Package taxlist version 0.2.4 Description 可以应用 S4 对象到 list 对象的强制转换来探索它们的内容,避免由它们的验证引起的错误。 Usage S4_to_list(x) Argument 参数【x】:一个 taxlist 类对象或任意 S4 类。 Details 将 taxlist 对象强制转换…...

使用POI生成word文档的table表格
文章目录 使用POI生成word文档的table表格1. 引入maven依赖2. 生成table的两种方式介绍2.1 生成一行一列的table2.2 生成固定行列的table2.3 table合并列2.4 创建多个table存在的问题 使用POI生成word文档的table表格 1. 引入maven依赖 <dependency><groupId>org.…...
C# 继承、多态性、抽象和接口详解:从入门到精通
C# 继承 在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以…...

python在线聊天室(带聊天保存)
python Socket在线聊天室(带聊天保存) 需求功能 1.聊天信息保存功能(服务端会把信息保存到一个txt里面) 2.使用pyqt5框架作为一个可视化界面 3.具备一个服务端和多个客户端的功能 4.具备离线加入黑名单(离线踢出) 5.具备在线加入黑名单(在线加入黑名单被踢出) 6.具备群聊功能…...

jenkins+gitlab实现Android自动打包填坑之旅
一.背景 1.首先你需要知道你想要实现的Android自动打包的Android项目的一些环境配置及需要使用的一些开发版本。 声明:本文 Android项目基于:1.jdk11 2.SDK无要求 3.gradle无要求(同Manven一样为项目自动化构建开源工具) 注&am…...
洛谷B3625迷宫寻路
迷宫寻路 题目描述 机器猫被困在一个矩形迷宫里。 迷宫可以视为一个 n m n\times m nm 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。 机器猫初始时位于 ( 1 , 1 ) (1, 1) (1,1) 的位置,问能否…...

GPT-SoVITS 测试
开箱直用版(使用 AutoDL) step1 打开地址 https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official 选择 AutoDL创建实例,选择 3080ti 机器 step2 创建好实例之后,进入命令行,输入命令 echo {}>…...

人工智能:更多有用的 Python 库
目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在这篇文章中,我们将了解更多的矩阵操作,同时再介绍几个人工智能 Python 库。 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&#x…...
Linux BIO如何下发到HDD?
在Linux操作系统中,当创建一个Block I/O请求(BIO)时,它会被封装成适合硬件交互的数据结构,并通过内核存储子系统传递到对应的硬件控制器上,如SAS(Serial Attached SCSI)HBAÿ…...

《动手学深度学习(PyTorch版)》笔记4.6
注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...