下载
https://github.com/hailong0715/jsoncpp/tree/master
windows编译工程
jsoncpp-master\makefiles\vs71
1.msvcprtd.lib(MSVCP140D.dll) : error LNK2005
解决办法:
(1).工程(Project)->属性(Properties)->配置属性(Configuration Properties)->c/c++->代码生成(Code Generation)->运行时库(Use run-time library)->多线程调试DLL(/MDd)(Multithreaded DLL/Debug Multithreaded DLL)
编译库的工程和自己当前开发的工程,都要使用同样的设置。也就是json对应的.lib文件是分模式(Debug或Release)的,两种编译模式在两个工程配置中需要保持一致。
(2).如果两种模式的工程配置是一致的但是还是无法解决,就需要忽略出问题的库文件了。方法如下:
工程(Project)->属性(Properties)->配置属性(Configuration Properties)->链接器->输入->忽略特定库中添加重定义的库文件,这里是msvcprtd.lib和LIBCMTD.lib。
2.error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
Debug工程使用了Release的库文件。
如果出现 error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”。
那就是Release使用了Debug的库文件。
linux
undefined reference to `Json::Value::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
编译版本和开发环境部匹配,需要重新编译库
python amalgamate.py
sudo yum install cmake
mkdir -p build/debug
cd build/debug
cmake -DCMAKE_BUILD_TYPE=debug -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ../..
make
如果报错
./jsoncpp_test: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./jsoncpp_test)
find / -name libstdc++.so.*
strings /lib64/libstdc++.so.6.0.28|grep GLIBCXX
cd /lib64
ls -l libstdc*
mv libstdc++.so.6 libstdc++.so.6_bak2
sudo ln -s libstdc++.so.6.0.28 libstdc++.so.6