如果:1.安装JSONCPP是使用下面语句系统自动安装的。
sudo apt-get install libjsoncpp-dev
系统会自动安装,静态库在系统:/usr/include;动态库在:/usr/lib/x84_64-linux-gnu ;
在动态库里面会有libjsoncpp.a文件。
出现这个问题就是CMake 没有引用这个文件。
现在来说说怎么引用这个文件:
在CMakeLists.txt里面加入以下代码:
第一种方法:set(lib_DIR /usr/lib/x84_64-linux-gnu)
link_directories(${lib_DIR})
target_link_libraries(http libjsoncpp.a)
第二种方法:set(lib_DIR /usr/lib/x84_64-linux-gnu)
find_package(${lib_DIR})
target_link_libraries(http libjsoncpp.a)
现在来讲解一下这些方法:
set(lib_DIR /usr/lib/x84_64-linux-gnu)
这个的lib_DIR是设置变量用于后面调用。/usr/lib/x84_64-linux-gnu是文件连接地址。
link_directories(${lib_DIR})这个是连接到这个变量的地址。${lib_DIR}这使用前面定义的变量。
target_link_libraries(http libjsoncpp.a)这个会自动在连接的所有地址进行查找libjsoncpp.a文件,再引用到http项目里面。http是项目名称。
find_package(${lib_DIR})与link_directories(${lib_DIR})一样的作用。官方建议使用find_package(${lib_DIR})。想了解为什么。百度一下。
最后运行就可以实现了。
参考:
https://blog.csdn.net/qing310820/article/details/84283650
https://blog.csdn.net/u013870094/article/details/78153408
最近在Qt的项目中
使用
JSON
库的时候,
出现
了挺多错误的,一个是链接库的错误,环境是UNBUNTU16.4,本以为系统中已经安装了
json
cpp
的库了,结果却无法链接。
正确做法是,添加链接即可:
LIBS += -L/usr/local/lib /usr/local/lib/lib
json
cpp
.a
这里
使用
的
json
库时
json
cpp
库,下载地址:
json
cpp
-master.zip:
通过将编译的文件放在前面,可以确保在解析源文件时已经解析了所有依赖的符号,从而避免了链接错误。因此,如果依赖的库放在编译的文件之前,编译器会在尚未解析这些符号的情况下开始解析源文件,从而导致链接错误。总结起来,将编译的文件放在前面、依赖的库放在后面是为了确保正确解析和链接符号,以生成可执行文件。问题的起因是,我在
使用
自己打包的动态库的时候,编译时提示动态库里指向的另一个库找不到…的顺序解析源文件和库文件。如果在链接过程中遇到未解析的符号,它会。然后我调整了一下顺序,就能编译通过了。
JSON
是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择
JSON
的全称为:JavaScript Object Notation ,顾名思义,
JSON
是用于标记javascript对象的,详情参考http://www.
json
.org/。
Json
Cpp
为解析
json
的第三方库来,
Json
Cpp
是比较出名的
c++
解析库,在
json
官网也是首推的。本版本可以用
cmake
编译生成lib。编译后生成的lib文件,下载地址为 https://download.csdn.net/download/qq_28351609/10822737
使用
json
cpp
出现
,
json
_test.
cpp
:(.text+0x2c):
undefined
reference
to `
Json
::
Value
::
Value
(
Json
::
Value
Type)问题lib
json
cpp
.a库没有正确链接。
undefined
reference
to `
Json
::
Value
::
Value
根据这个链接的说法,you have
json
cpp
compiled with a different
C++
ABI than you link against. The easiest solution is to use exactly the same compiler-version to build both library and executable.
json
cpp
使用
了其他的c+
可以确定的是,静态库是链接成功了,然后。
json
库 的问题是真的多啊。调用给的
json
静态库 0.7。把有问题的这一段给注释就没问题。链接静态库,后面一直卡在这里。官方也没有很好的觉得方式。奇葩问题 小本本记下来。扎个眼,后面再来记录。
[root@node1 windows_share]# g++
json
cpp
_test.cc
/tmp/ccAclhTh.o: In function `main':
json
cpp
_test.cc:(.text+0x51):
undefined
reference
to `
Json
::Reader::Reader()'
json
cpp
_test.cc:(.t
增加了依赖库的路径,同时要指定连接的库.。 依赖的库是lib
json
cpp
.so ,路径是工程目录的lib目录下。 需要在Makefile文件中增加的命令是:
LDFLAGS= -L./lib
LDFLAGS =-l
json
cpp
Json
::
Value
Head;
root["gatewayIP"] =
Json
::
Value
(gatewayIP);
root["repeaterIP"] = repeaterIP;
root["groupAccount"] = groupAccount;
root["groupPwd"] = groupPwd;
root["agentAccount"] = agentAccount;
Json
::
Value
narrowId1;
Json
::
Value
narrowId2;
narrowId1["nBGroupID"] = nBGroupID1;
narrowId1["sLAccount"] = sLAccount1;
narrowId2["nBGroupID"] = nBGroupID2;
narrowId2["sLAccount"] = sLAccount2;
if(0 < nBGroupID1.size()){
root["nBGroups"].append(narrowId1);
if(0 buff_root, strlen(tmpdata.c_str())+1, tmpdata.c_str());
cout<<"buff_root :"<buff_root << endl;
使用
C++
处理
JSON
数据交换格式
JSON
的全称为:JavaScript Object Notation,顾名思义,
JSON
是用于标记 Javascript 对象的,
JSON
官方的解释为:
JSON
是一种轻量级的数据传输格式。本文并不详细介绍
JSON
本身的细节,旨在讨论如何
使用
C++
语言来处理
JSON
。关于
JSON
更具体的信息,可参见
JSON
官网:http://www.
json
.org。