百度上搜索“windows 编译 jsoncpp”都是针对jsoncpp 0.y.z版本的(大多是0.5.0或者0.10.x)为主,对1.y.z的几乎没有。而刚好我涉及到的应用(百度AI的c++API必须要求1.6.2以上)。摸索后总结如下。
-
下载jsoncpp源码
GitHub下载:https://github.com/open-source-parsers/jsoncpp
或者点击 这里 下载
下载完成后解压。 -
0.y.z版本源码目录中有现成的vs项目,而1.y.z并没有,所以无法直接编译。
-
尝试借助cmake工具生成vs项目文件。因为使用到了c++11的新特性,所以建议下载最近的cmake。
官网地址:https://cmake.org/download/
我下载的是最新稳定版:cmake-3.14.5-win64-x64.zip
解压。 -
进入jsoncpp-master目录,创建子目录
mkdir -p build\debug
cd build\debug
- 使用cmake产生工程项目文件
cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_INCLUDEDIR=include -DARCHIVE_INSTALL_DIR=.
如果提示错误
CMake Error at src/lib_json/CMakeLists.txt:89 (target_compile_features):
target_compile_features specified unknown feature “cxx_std_11” for target
“jsoncpp_lib”.
– Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version “2.6”)
– Configuring incomplete, errors occurred!
那么就是因为当前版本的cmake太旧,需要按照步骤3重新下载更新版本。
正确的提示应该是:
D:\jsoncpp-master\build\debug>D:\ProgramUtils\cmake-3.14.5-win64-x64\bin\cmake.exe -DCMAKE_BUILD_TYPE=release -DBUILD_STAT
IC_LIBS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_INCLUDEDIR=include -DARCHIVE_INSTALL_DIR=. ../..
-- The CXX compiler identification is MSVC 18.0.21005.1
-- Check for working CXX compiler: D:/ProgramIDE/Microsoft Visual Studio 12.0/VC/bin/cl.exe
-- Check for working CXX compiler: D:/ProgramIDE/Microsoft Visual Studio 12.0/VC/bin/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- JsonCpp Version: 1.9.0
-- Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) (Required is at least version "2.6")
-- Configuring done
-- Generating done
-- Build files have been written to: D:/jsoncpp-master/build/debug
- 打开vs项目文件
D:\jsoncpp-master\build\debug目录下生成了JSONCPP.sln
D:\jsoncpp-master\build\debug\src\lib_json目录下生成了jsoncpp_lib.vcxproj
以及其他一些项目文件
双击使用Visual Studio打开JSONCPP.sln,就可以进行编译了。