Jsoncpp搭建交叉编译环境(移植到arm)

1. 官网下载源码

github地址:GitHub - open-source-parsers/jsoncpp at update

2. 交叉编译环境 

当前平台/开发平台-编译环境:

[root@localroot ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@localroot ~]# uname -a
Linux localroot 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localroot ~]# lscpu | grep Architecture
Architecture:          x86_64

目标平台/运行平台-目标环境:

root@linaro-alip:~# uname -a
Linux linaro-alip 4.4.132 #38 SMP Sat Jan 4 15:11:14 CST 2020 armv7l GNU/Linux
root@linaro-alip:~# lscpu | grep Architecture
Architecture:          armv7l

3. 交叉编译步骤

1)解压软件包,进入到解压目录,并建立独立文件夹作为独立环境区

mkdir jsoncpp_arm

2)将要交叉编译的文件全部拷贝到独立环境区中

# include:后面所需要包含的头文件所在地
# src/lib_josn:功能实现文件
cp -r ./include/ jsoncpp_arm/
cp src/lib_json/* jsoncpp_arm/

 3)编译静态库当前博客只使用到静态库

cd jsoncpp_arm/
arm-linux-gnueabihf-g++ -c *.cpp -I./include -fPIC
ar -cr libjsoncpp.a *.o
# ar -cr:把一堆的目标文件.o合成一个库文件,专门链接生成静态库的命令
# c : 即create,创建静态库
# r : 即replace,当静态库改变时,替代原有静态库

注意:arm-linux-gnueabihf-g++ 是对应目标平台/arm平台用到的交叉编译链,查询对应目标平台使用的的是哪种工具链,再对应进行下载安装,进行编译即可。 

4)动态库编译

cd jsoncpp_arm/
arm-linux-gnueabihf-g++ -shared -fPIC *.cpp -I./include -o libjsoncpp.so
# shared:把对应的源文件形成对应的动态链接库。
# fPIC:用于生成位置无关的代码(Position-Independent-Code),代码在加载到内存时使用相对地址,所有对固定地址的访问都通过全局偏移表(GOT)来实现 —— 使.so文件的代码段变为真正意义上的共享

 4. 程序的编译和使用

1)将编译出来的动态库链接放到系统lib路径下,如 usr/lib/

2)工程代码中使用是包含头文件 "json/json.h"

3)jsoncpp_arm/include/下的json/文件夹添加到工程目录

否则会报错,找不到头文件:

4)静态库复制

cp /home/libjson/jsoncpp-master/jsoncpp_arm/libjsoncpp.a /usr/local/lib

5)编译程序

# 进入程序目录
arm-linux-gnueabihf-g++ main.cpp -L /usr/local/lib /usr/local/lib/libjsoncpp.a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315831.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK创建仪表盘

创建仪表盘步骤: 一、保存search二、生成饼图三、创建仪表盘 一、保存search 首先保存一段时间内的search,可以添加想要的字段,并保存这个search方便下次直接打开该search,并方便在可视化和仪表盘中使用该search. 二、生成饼图…

Mac安装telnet

一、安装Homebrew 1、打开官网:Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

数字文旅重塑旅游发展新格局:以数字化转型为突破口,提升旅游服务的智能化水平,为游客带来全新的旅游体验

随着信息技术的迅猛发展,数字化已成为推动各行各业创新发展的重要力量。在旅游业领域,数字文旅的兴起正以其强大的驱动力,重塑旅游发展的新格局。数字文旅以数字化转型为突破口,通过提升旅游服务的智能化水平,为游客带…

急急急!微信朋友圈删除了怎么恢复?

微信朋友圈是我们与朋友分享生活点滴的重要平台,但有时候微信出现异常,导致我们编辑好的朋友圈被删除了,这时候该怎么办呢? 幸运的是,微信提供了一种简单的方式来恢复已删除的朋友圈内容。微信朋友圈删除了怎么恢复&a…

四信数字孪生水库解决方案,加快构建现代化水库运行管理矩阵

近年,水利部先后出台《关于加快构建现代化水库运行管理矩阵的指导意见》与《构建现代化水库运行管理矩阵先行先试工作方案》等文件,明确总体要求及试点水库、先行区域建设技术要求等,为全面推进现代化水库运行管理矩阵建设工作提供依据。 《2…

【Elasticsearch<一>✈️✈️】简单安装使用以及各种踩坑

目录 🍸前言 🍻一、软件安装(Windows版) 1.1、Elasticsearch 下载 2.1 安装浏览器插件 3.1、安装可视化工具 Kibana 4.1、集成 IK 分词器 🍺二、安装问题 🍹三、测试 IK 分词器 ​🍷 四、章…

spi接口的基本概念、引脚定义及注意事项

目录 基本概念 引脚定义 注意事项 SPI(Serial Peripheral Interface)是一种同步串行接口技术,广泛应用于微控制器和各种外围设备之间的短距离通信。 基本概念 SPI接口允许微控制器以串行方式与一个或多个外围设备进行通信。它是一种高速、…

统信UOS下如何配置全局搜索

原文链接:统信UOS下如何配置全局搜索 Hello,大家好啊!全局搜索是操作系统中非常实用的一个功能,它可以帮助我们快速定位文件、程序和其他资源。今天,我要给大家介绍如何在统信UOS桌面操作系统上配置全局搜索&#xff0…

IT廉连看——UniApp——样式绑定

IT廉连看——UniApp——样式绑定 一、样式绑定 两种添加样式的方法: 1、第一种写法 写一个class属性,然后将css样式写在style中。 2、第二种写法 直接把style写在class后面 添加一些效果:字体大小 查看效果 证明这样添加样式是没有问题的…

基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(matlab代码)

目录 1 主要内容 系统结构图 P2G-CCS 耦合模型 系统掺氢分析 其他算例对比 2 部分代码 3 下载链接 1 主要内容 该程序复现《基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度》模型,以碳交易和碳封存成本、燃煤机组启停和煤耗成本、弃风成本、购…

数据结构-二叉搜索树(BST)

目录 什么是二叉搜索树 二叉搜索树的特性 (1)顺序性 (2)局限性 二叉搜索树的应用 二叉搜索树的操作 (1)查找节点 (2)插入节点 (3)删除节点 (4)中序遍历 什么是二叉搜索树 如图所示,二叉搜索树(binary search tree)满足以下条件。…

2024长三角快递物流展:科技激荡,行业焕发新活力

7月8日,杭州将迎来快递物流科技盛宴,这是一年一度的行业盛会,吸引了全球领先的快递物流企业和创新技术汇聚一堂。届时,会展中心将全方位展示快递物流及供应链、分拣系统、输送设备、智能搬运、智能仓储、自动识别、无人车、AGV机器…

【树莓派】yolov5 Lite,目标检测,行人检测入侵报警,摄像头绑定

延续之前的程序: https://qq742971636.blog.csdn.net/article/details/138172400 文章目录 播放声音pygame不出声音怎么办(调节音量)树莓派上的音乐播放器(可选)命令行直接放歌(尝试放mp3歌曲) …

深度学习的炼金术:转化数据为黄金的秘密

深度学习的炼金术:转化数据为黄金的秘密 1 引言 在现代深度学习的壮阔疆域中,数据是王冠上耀眼的宝石,而性能优化则是锻造这顶王冠的炼金术。这份融合了数据和算法魔力的艺术,不仅仅依赖于强大的计算资源和复杂的网络结构&#x…

Docker——开源的应用容器的引擎

目录 一、前言 1.虚拟化产品有哪些 1.1寄居架构 1.2源生架构 2.虚拟化产品对比/介绍 2.1虚拟化产品 2.1.1仿真虚拟化 2.1.2半虚拟化 2.1.3全虚拟化 2.2重点 2.2.1KVM——Linux内核来完成的功能和性能 2.2.2ESXI——用的比较多 二、Docker概述 1.Docker定义 2.Do…

常用算法代码模板 (3) :搜索与图论

AcWing算法基础课笔记与常用算法模板 (3) ——搜索与图论 常用算法代码模板 (1) :基础算法 常用算法代码模板 (2) :数据结构 常用算法代码模板 (3) :搜索与图论 常用算法代码模板 (4) :数学知识 文章目录 0 搜索技巧1 树与图的存…

【while循环】

目录 什么是循环 while语句的执行过程 编程求1*2*3*...*n 所有不超过1000的数中含有数字3的自然数 求数 求数II 编程求1平方2平方...n平方 什么是循环 循环就是重复做同样的事儿使用while语句循环输出1到100 int i 1; while( i < 100 ){cout <<…

Java虚拟机垃圾收集器详细总结

1、Serial收集器 Serial收集器是最基础、历史最悠久的收集器&#xff0c;曾经&#xff08;在JDK 1.3.1之前&#xff09;是HotSpot虚拟机新生代收集器的唯一选择。这个收集器是一个单线程工作的收集器&#xff0c;但它的“单线 程”的意义并不仅仅是说明它只会使用一个处理器或一…

自制贪吃蛇小游戏

此片文章涉及到到控制台设置的相关操作&#xff0c;虚拟键码&#xff0c;宽字符输出等&#xff0c;有些地方大家可能会看不懂&#xff0c;可以阅读以下文章来进一步了解&#xff1a; 控制台程序设置-CSDN博客 效果展示&#xff1a; QQ2024428-181932 源码已放在文章结尾 目录 …

Vivado-IP-DDS and Testbench Learning

DDS内部结构 实现流程 首先新建一个工程&#xff0c;创建bd文件&#xff0c;添加DDS Compiler核&#xff0c;此处不多赘述 Block Design 在观测输出的信号时&#xff0c;需要将最高位符号位的信号取反&#xff0c;这样才能输出正弦波&#xff0c;否则输出的波形如下图所示 将t…