/*----------补充:这个笔记的环境 #ubuntu 12.04 32bit 太老,可能不适用。--------------------------*/
这个是github 中的最新jsoncpp 源码,看网上有好多安装jsoncpp库时,用的老的版本,配合使用scons (这是一个构建品台,用来构建项目,类似于configure + makefile系统)来编译 jsoncpp,但这里的jsoncpp-master, 看里面的readme,
使用的是meson 和 ninja 这两个玩意也是类似 scons的一个构建工具,既然新版本要meson 和ninja
没办法,再安装下这两个玩意,用apt-get install找不到,去git-hub搜索找源码安装
https://github.com/open-source-parsers/jsoncpp
https://github.com/mesonbuild/meson
https://github.com/ninja-build/ninja
编译安装过程一路坎坷 注意:github中上面的几个项目都是在不停更新的,对环境的要求也是不停地更新,很有可能下载的最新版本按这个方法就编编译不过。注意看reademe
1.0安装之前,因为这几个工具都需要使用python3,并且版本不能太低,至少python3.5
ubuntu上自带的pythoh2.7,用apt-get install python3安装的是python3.2
所以,得安装一个python3.5以上。
/******
python --version
python3 --version
$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python3.5
后面把装好的python3.5 在可执行文件目录下面把之前的python软连接直到python3.5
*********/
安装ninja:
./configure.py --bootstrap
然后把ninja 拷贝到 /usr/bin
安装meson :
python setup.py install #注意这里python是刚安装好的python3.5
编译jsoncpp: 安装readme中的指示编译:
mkdir build-static
DESTDIR=./build-static //貌似后面没有加进配置中去
#BUILD_TYPE=debug #如果要编译debug版本,注释后面行,并取消当前行的注释
BUILD_TYPE=release
#LIB_TYPE=shared #编译动态链接库版本
LIB_TYPE=static #编译静态链接库版本
//正式配置(类似于configure)
/usr/local/bin/meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE}ninja -v -C build-${LIB_TYPE} test
cd build-${LIB_TYPE}
//编译安装(make make install)
sudo ninja install
2.0编译jsoncpp时,有 错误unrecognized command line option “-std=c++11”
c++11需要 gcc 4.7以上才支持,
#g++ --version
#g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
所以需要升级gcc
#add-apt-repository ppa:ubuntu-toolchain-r/test
#apt-get update
#sudo apt-get install gcc-4.8 g++-4.8
安装完gcc4.8,设置为默认编译器 参考这一篇https://blog.csdn.net/arackethis/article/details/42212443
3.0还有一个插曲,因为上面刚刚把 python指向了python3.5, 原先是指向python2,
现在执行:add-apt-repository ppa:ubuntu-toolchain-r/test 就报语法错误,这个命令应该是用到了python脚本,pyhton3和python2差别有点大,没办法,在吧/usr/bin的python软连接改回来,用python3指向python3.5
但是在升级好gcc,开始编译,执行meson 配置的时候,问题又来了
好吧,pyhton还是得改为python3.5(记得整个编译完,再改回去)
最后还是被安装到默认目录中去了,没办法,手动拷贝一下吧
OK