安装依赖工具
sudo yum install cmake make gcc
- cmake 需要升级至 3.8.0 以上可参考:CentOS安装CMake
- gcc 需要升级至9.0 以上可参考:CentOS 7升级gcc版本
下载源码
wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.tar.gz
tar -xzf 1.9.5.tar.gz
cd jsoncpp-1.9.5
编译并安装
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON # 生成共享库
make
sudo make install
注意,在cmake ..
后面加上了-DBUILD_SHARED_LIBS=ON
选项,会生成静态库和共享库。若不添加,则只会生成静态库。
配置环境变量
sudo vim /etc/profile
添加以下内容
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib64
更新环境变量
source /etc/profile
验证安装
编写测试代码(test.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;
}
编译并运行:
g++ test.cpp -o test -ljsoncpp
./test
输出应为格式化的JSON字符串:
{
"age" : 30,
"name" : "John"
}
常见问题
1. 找不到头文件:
- 确认安装路径,若从源码安装,使用
-I /usr/local/include
指定头文件路径。
2. 链接库失败:
- 添加
-L /usr/local/lib
指定库路径,并确保LD_LIBRARY_PATH
包含该路径。
3. 更新动态链接库
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