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

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

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FFmpeg是一个开源的音视频处理库,而OpenCV是一个开源的计算机视觉库。它们可以通过交叉编译的方式进行整合,以实现音视频处理和计算机视觉的功能。 下面是一种常见的方法来将FFmpeg和OpenCV进行交叉编译: 1. 配置交叉编译环境:首先,你需要配置好交叉编译环境,包括交叉编译工具链和相关的库文件。这些工具链和库文件需要根据你的目标平台来选择和配置。 2. 下载和编译FFmpeg:从FFmpeg官方网站下载最新的源代码,并解压到本地。然后,在终端中进入FFmpeg源代码目录,执行以下命令进行交叉编译: ``` ./configure --prefix=<安装路径> --enable-shared --disable-static --cross-prefix=<交叉编译工具链前缀> --target-os=<目标操作系统> --arch=<目标架构> --extra-cflags="-I<交叉编译工具链头文件路径>" --extra-ldflags="-L<交叉编译工具链库文件路径>" make make install ``` 这些命令将会配置、编译和安装FFmpeg库到指定的安装路径。 3. 下载和编译OpenCV:从OpenCV官方网站下载最新的源代码,并解压到本地。然后,在终端中进入OpenCV源代码目录,执行以下命令进行交叉编译: ``` mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE=<交叉编译工具链文件> -DCMAKE_INSTALL_PREFIX=<安装路径> .. make make install ``` 这些命令将会配置、编译和安装OpenCV库到指定的安装路径。 4. 链接FFmpeg和OpenCV:在你的项目中,你可以使用FFmpeg和OpenCV的头文件和库文件来进行开发。在编译时,需要指定FFmpeg和OpenCV的头文件路径和库文件路径,并链接对应的库文件。 以上是一种常见的方法来将FFmpeg和OpenCV进行交叉编译。具体的配置和编译过程可能会因为不同的平台和工具链而有所差异,请根据你的实际情况进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wkd_007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值