CentOS 7 源码安装libjsoncpp-1.9.5库

安装依赖工具

bash 复制代码
sudo yum install cmake make gcc

下载源码

bash 复制代码
wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.tar.gz
bash 复制代码
tar -xzf 1.9.5.tar.gz
bash 复制代码
cd jsoncpp-1.9.5

编译并安装

bash 复制代码
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON  # 生成共享库
make
sudo make install

注意,在cmake ..后面加上了-DBUILD_SHARED_LIBS=ON选项,会生成静态库和共享库。若不添加,则只会生成静态库。

配置环境变量

bash 复制代码
sudo  vim /etc/profile

添加以下内容

cpp 复制代码
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib64

更新环境变量

cpp 复制代码
source /etc/profile

验证安装

编写测试代码test.cpp):

cpp 复制代码
#include <iostream>
#include <json/json.h>

int main() {
    Json::Value root;
    root["name"] = "John";
    root["age"] = 30;
    std::cout << root.toStyledString() << std::endl;
    return 0;
}

编译并运行

bash 复制代码
g++ test.cpp -o test -ljsoncpp
./test

输出应为格式化的JSON字符串:

bash 复制代码
{
  "age" : 30,
  "name" : "John"
}

常见问题

1. 找不到头文件

  • 确认安装路径,若从源码安装,使用-I /usr/local/include指定头文件路径。

2. 链接库失败

  • 添加-L /usr/local/lib指定库路径,并确保LD_LIBRARY_PATH包含该路径。

3. 更新动态链接库

bash 复制代码
sudo ldconfig

4. 编译报错

复制代码
[ 82%] Building CXX object src/test_lib_json/CMakeFiles/jsoncpp_test.dir/jsontest.cpp.o
In file included from /home/summergao/jsoncpp-1.9.5/src/test_lib_json/jsontest.cpp:7:0:
/home/summergao/jsoncpp-1.9.5/src/test_lib_json/jsontest.h: In member function 'JsonTest::TestResult& JsonTest::TestResult::operator<<(const T&)':
/home/summergao/jsoncpp-1.9.5/src/test_lib_json/jsontest.h:87:37: error: 'hexfloat' is not a member of 'std'
     oss << std::setprecision(16) << std::hexfloat << value;
                                     ^
make[2]: *** [src/test_lib_json/CMakeFiles/jsoncpp_test.dir/build.make:76: src/test_lib_json/CMakeFiles/jsoncpp_test.dir/jsontest.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1031: src/test_lib_json/CMakeFiles/jsoncpp_test.dir/all] Error 2
make: *** [Makefile:146: all] Error 2

问题原因

GCC版本太低导致

解决办法

切换GCC版本

复制代码
scl enable devtoolset-9 bash

重新构建编译

复制代码
cd build && rm -rf * 

cmake .. -DBUILD_SHARED_LIBS=ON
复制代码
make
相关推荐
h***83933 分钟前
Docker测试框架使用指南
运维·docker·容器
Aaron15884 分钟前
通用的通感控算存一体化平台设计方案
linux·人工智能·算法·fpga开发·硬件工程·射频工程·基带工程
讨厌下雨的天空6 分钟前
缓冲区io
linux·服务器·前端
知南x17 分钟前
【Socket消息传递】(1) 嵌入式设备间Socket通信传输图片
linux·fpga开发
7***n7532 分钟前
Docker镜像瘦身
运维·docker·容器
沐浴露z1 小时前
一张思维导图理清【操作系统】
java·linux·网络
太阳风暴1 小时前
Linux CPU频率文件详解:cpuinfo__freq 与 scaling_cur_freq
linux·服务器·cpu
Yxrrr__2 小时前
Linux系统常用命令
linux·运维·服务器
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [kernel]signal
linux·笔记·学习
栈低来信2 小时前
Linux I2C子系统
linux