libjsoncpp 的编译和交叉编译

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍libjsoncpp 的编译和交叉编译 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

本文未经允许,不得转发!!!


在这里插入图片描述

🎄一、编译环境

  • 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.2
    
    CMake 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_TESTSON改为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/bash

echo "tar zxf jsoncpp-1.9.5.tar.gz"
tar zxf jsoncpp-1.9.5.tar.gz

echo "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进行交叉编译。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

相关推荐

  1. 交叉编译

    2024-01-26 11:12:02       39 阅读
  2. Bluez交叉编译

    2024-01-26 11:12:02       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 11:12:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 11:12:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 11:12:02       87 阅读
  4. Python语言-面向对象

    2024-01-26 11:12:02       96 阅读

热门阅读

  1. P1065 [NOIP2006 提高组] 作业调度方案题目

    2024-01-26 11:12:02       52 阅读
  2. ssh: connect to host github.com port 22: Connection refused

    2024-01-26 11:12:02       48 阅读
  3. Spring---@Import注解

    2024-01-26 11:12:02       50 阅读
  4. Html转义字符及其对应的实体名称

    2024-01-26 11:12:02       45 阅读
  5. 【MQ01】什么是消息队列?用哪个消息队列?

    2024-01-26 11:12:02       47 阅读
  6. 实习记录——第四天

    2024-01-26 11:12:02       48 阅读
  7. webpack tree shaking 摇树原理

    2024-01-26 11:12:02       43 阅读
  8. 数据结构进阶:二叉搜索树

    2024-01-26 11:12:02       57 阅读