本文主要是介绍CentOS7 编译使用 jsoncpp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
安装环境:CentOS7 1708 x64
官网下载jsoncpp:https://sourceforge.net/projects/jsoncpp/ 目前是jsoncpp-src-0.5.0.tar.gz版本
安装scons:
yum install scons
解压jsoncpp-src-0.5.0.tar.gz,
tar -zxvf jsoncpp-src-0.5.0.tar.gz
然后进去其目录
cd /usr/local/jsoncpp-src-0.5.0
输入编译命令:
scons platform=linux-gcc
在 /usr/local/jsoncpp-src-0.5.0/libs/linux-gcc-4.8.5 目录下会生成两个文件:
[root@kvm183 linux-gcc-4.8.5]# ll
总用量 992
-rw-r--r--. 1 root root 644508 7月 10 17:17 libjson_linux-gcc-4.8.5_libmt.a
-rwxr-xr-x. 1 root root 365944 7月 10 17:17 libjson_linux-gcc-4.8.5_libmt.so
生成的文件名与当前gcc版本有关。
将这两个文件拷贝到 /usr/lib64 下,
include下面的文件夹json拷贝到 /usr/include 下。
下面是一段测试代码,保存成 jsoncpptest.cpp:
#include "json/json.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{string test ="{"id":1,"name":"kurama"}";Json::Reader reader;Json::Value value;if(reader.parse(test,value)){if(!value["id"].isNull()){cout<<value["id"].asInt()<<endl;cout<<value["name"].asString()<<endl;}}return 0;
}
编译:
g++ jsoncpptest.cpp -ljson_linux-gcc-4.8.5_libmt
运行:
[root@kvm183 server]# ./a.out
1
kurama
成功!
遇到的问题:
/tmp/ccg0ljPT.o:在函数‘inshare(char*, char*, char*)’中:
server0716.cpp:(.text+0x1ea3):对‘Json::Value::operator[](int)’未定义的引用
server0716.cpp:(.text+0x1fbf):对‘Json::Value::operator[](int)’未定义的引用
collect2: 错误:ld 返回 1
上面这个是头文件不对,之前用其他方法安装jsoncpp,偷懒没有把压缩包里的include文件夹拷贝过来更新。
[root@kvm183 server]# gcc testjson.cpp -I /usr/include/jsoncpp/ -L /usr/lib64/ -ljson_linux-gcc-4.8.5_libmt
/usr/bin/ld: /tmp/cc1mEfDl.o: undefined reference to symbol '_ZNSsD1Ev@@GLIBCXX_3.4'
/usr/lib64/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: 错误:ld 返回 1
上面这是用 gcc编译报的错,改用 g++后,就可以了。
这篇关于CentOS7 编译使用 jsoncpp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!