基础开发库的安装与使用文档

 

1SCons安装与使用

scons是linux下的自动构建工具,类似cmake。

因为SCons是用Python编写的,所以你必须在使用SCons之前安装好Python。你在安装Python之前,应该注意查看Python是否在你的系统里已经可用了(在系统的命令行中运行python -V或python --version)。scons的安装步骤如下:

#wget http://prdownloads.sourceforge.net/scons/scons-2.3.1.tar.gz .

#tar  zxvf scons-2.3.1.tar.gz

#cd  scons-2.3.1

#python setup.py install --prefix=/opt/scons  //安装路径

正常情况下使用#pythonsetup.py install 安装,scons将安装到到python目录(/usr/local/bin)下。

如果你没有权限安装SCons到系统目录,使用--prefix选项安装到你选择的其他的位置。例如,安装SCons到相对于用户$HOME目录的合适的位置,scons脚本安装到$HOME/bin,编译引擎安装到$HOME/lib/scons,使用如下命令:

#python setup.py install --prefix=$HOME

2 JsonCpp安装与使用

2.1 JsonCpp的安装

jsoncpp是一个c++封装的json包,跨平台支持windows、linux、unix等多系统,linux下面编译需要使用到scons,见第1节。scons是python工具,需要先安装好python。

(1)下载文件:

jsoncpp下载地址:http://sourceforge.net/projects/jsoncpp/files/jsoncpp/

使用的jsoncpp文件:jsoncpp-src-0.5.0.tar.gz

(2)开始编译jsoncpp:

# tar-zxvf jsoncpp-src-0.5.0 .tar.gz

# cdjsoncpp-src-0.5.0

# sconsplatform=linux-gcc

(3)静态和动态库文件在jsoncpp-src-0.5.0/libs/linux-gcc-4.1.2目录下

libjson_linux-gcc-4.4.4_libmt.a

libjson_linux-gcc-4.4.4_libmt.so

头文件在jsoncpp-src-0.5.0/include目录下。

 

为了方便,

A)可把jsoncpp-src-0.5.0/include目录下的json文件夹拷贝到/usr/local/include目录下

B)可把libjson_linux-gcc-4.4.4_libmt.so文件拷贝到/usr/local/lib 目录下,重命名为libjson.so;把libjson_linux-gcc-4.4.4_libmt.a文件拷贝到/usr/local/lib 目录下,重命名为libjson.a。

注意在编译时指定动态链接库-ljson。

2.2 JsonCpp的使用

2.2.1 生成json代码

#include <iostream>

#include <string.h>

#include "json/json.h"

using namespace std;

 

int main(int argc,char *argv[])

{

          Json::Value root;

          Json::FastWriter fast;

          root["ModuleType"] = Json::Value("你好");

          root["ModuleCode"] = Json::Value("22");

          root["ModuleDesc"] = Json::Value("33");

          root["DateTime"] = Json::Value("44");

          root["LogType"] = Json::Value("55");

          cout<<fast.write(root)<<endl;

 

         return 0;

}

2.2.1 解析json代码

#include <iostream>

#include <string.h>

#include "json/json.h"

using namespace std;

 

int main(int argc,char *argv[])

{

         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;

}

 

3 boost安装与使用

3.1 boost的安装

下载地址:

URL:http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_56_0.tar.gz/download

 

开始编译,全部编译耗时太多,所以我仅选择我需要的库:

先用下面的命令查看有多少库可以编译:

./bootstrap.sh --show-libraries

Building Boost.Build engine with toolsetgcc... tools/build/v2/engine/bin.linuxx86_64/b2

 

The following Boost libraries have portionsthat require a separate build

and installation step. Any library notlisted here can be used by including

the headers only.

 

The Boost libraries requiring separatebuilding and installation are:

    -atomic

    -chrono

    -context

    -coroutine

    -date_time

    -exception

    - filesystem

    -graph

    -graph_parallel

    -iostreams

    -locale

    -log

    -math

    -mpi

    - program_options

    -python

    -random

    - regex

    -serialization

    -signals

    - system

    -test

    - thread

    -timer

    -wave

 

然后就编译我要的库:

 

./bootstrap.sh--with-libraries=system,filesystem,regex,thread,program_options

Building Boost.Build engine with toolsetgcc... tools/build/v2/engine/bin.linuxx86_64/b2

Unicode/ICU support for Boost.Regex?... notfound.

Generating Boost.Build configuration inproject-config.jam...

 

Bootstrapping is done. To build, run:

 

   ./b2

  

To adjust configuration, edit'project-config.jam'.

Further information:

 

  -Command line help:

   ./b2 --help

  

  -Getting started guide:

   http://www.boost.org/more/getting_started/unix-variants.html

  

  -Boost.Build documentation:

   http://www.boost.org/boost-build2/doc/html/index.html

 

然后运行下面的命令完成编译。

./b2

耐心等待。不过因为不是编译所有库。时间会少很多。以后需要再来编译。很快看到结果:

 

The Boost C++ Libraries were successfullybuilt!

The following directory should be added tocompiler include paths:

/usr/src/boost_1_56_0

The following directory should be added tolinker library paths:

/usr/src/boost_1_56_0/stage/lib

 

运行./b2 install 命令进行安装,默认安装在

/usr/local/lib目录下(带横线处为兼容老版本所做的软链接)

头文件在

/usr/local/include/boost目录下

3.2 boost的测试

测试:test.cpp

#include <boost/lexical_cast.hpp>

#include <iostream>

int main()

{

using boost::lexical_cast;

int a = lexical_cast<int>("123");

double b = lexical_cast<double>("123.12");

std::cout<<a<<std::endl;

std::cout<<b<<std::endl;

return 0;

}

 

编译:

g++ test.cpp -I$BOOST_INCLUDE -L$BOOST_LIB-o test

./test

输出:

4 MongoClient安装与使用

4.1 MongoClient的安装

在安装mongo-cxx-driver前需要安装boost的regex、thread、system、filesystem等库

下载mongo-cxx-drive,示例使用的是mongo-cxx-driver-legacy-1.0.3-rc0

下载地址:https://github.com/mongodb/mongo-cxx-driver

#cd mongo-cxx-driver

#scons all

#scons--prefix=$HOME/mongo-client-install \  //指定安装路径

 --extrapath=/usr/local/boost  \      //指定所使用的boost库的路径,内含有include和lib

--sharedclient  install              //生成.so动态链接库

在build目录下有 libmongoclient.a便是我们使用C++操作数据库所需要的库文件了。

具体参考:

https://github.com/mongodb/mongo-cxx-driver/wiki/Download-and-Compile-the-Legacy-Driver#scons-options-when-compiling-the-c-driver

4.1 MongoClient的使用

#include <mongo/client/dbclient.h>

#include <stdio.h>

#include <string>

using std::string;

 

int main(int argc,char *argv[])

{

             mongo::client::GlobalInstance instance;

             if (!instance.initialized())

             {

                      printf("failed to initialize the client driver: %s" , instance.status().toString().c_str() );

                 return -1;

             }

       

        string errmsg;

        string uri=”mongodb://10.100.1.46:27001”;

         ConnectionString cs = ConnectionString::parse(uri, errmsg);

                   if (!cs.isValid())

                   {

                            printf("Error parsing connection string  %s : %s " , uri.c_str() , errmsg.c_str() );

                            return -1;

                   }

 

                   mongo::DBClientBase * pconn=cs.connect(errmsg);

                   if ( !pconn )

                   {

                            printf("couldn't connect : %s" , errmsg.c_str() );

                            return -1;

                   }

 

}

 

5 libxml2库安装

Libxml2库提供了C语言解析和构造xml文档的接口,为后台C语言处理程序和前台应用程序提供了一种通用的通迅方式。这里以libxml2-2.8.0.tar.gz为例。

5.1 libxml2的安装

下载地址:ftp://xmlsoft.org/libxml2/

libxml2-2.8. 0.tar.gz文件解压后,进入libxml2-2.8.0文件夹,顺序执行以下命令:

#./configure --prefix=/usr/local  //脚本根据当前编译系统的实际情况生成相应的makefile文件;

#make                //命令执行上一命令中生成的makefile文件生成相应的目标文件;

#make install           //命令主要把目标文件拷贝到/usr/local目录下

 

/usr/local/lib目录下为以下库文件:

libxml2.a  libxml2.la libxml2.so  libxml2.so.2  libxml2.so.2.6.30  pkgconfig xml2Conf.sh

/usr/local/include/libxml2目录是Libxml库使用时需要的头文件,包含在libxml子目录下;

5.2 libxml2的使用

Libxml2库的api参考可以从http://www.xmlsoft.org/html/index.html查询。下面以解析一个简单的xml文件为例,给出一个完整的例子。

 

Xml文档:

<ioMsg>

    <type>she</type>

    <subtype>

       <st1>123</st1>

       <st2>563</st2>

    </subtype>

</ioMsg>

 

C解析代码xmltest.c:

    #include <libxml/parser.h>

    #include <libxml/tree.h>

 

    int main(int argc, char* argv[])

    {

        xmlDocPtr doc; //定义解析文档指针

        xmlNodePtr curNode; //定义结点指针(你需要它为了在各个结点间移动)

        xmlChar *szKey; //临时字符串变量

        char *szDocName;

       

        if (argc <= 1)

        {

           printf("Usage: %s docname/n", argv[0]);

           return(0);

        }

        szDocName = argv[1];

        doc = xmlReadFile(szDocName,"GB2312",XML_PARSE_RECOVER); //解析文件

        if (NULL == doc)

        {

           printf("Document not parsed successfully/n");

           return -1;

        }

        curNode = xmlDocGetRootElement(doc); //确定文档根元素

        if (NULL == curNode)

        {

           printf("empty document/n");

           xmlFreeDoc(doc);

           return -1;

        }

        if (xmlStrcmp(curNode->name, BAD_CAST "ioMsg"))

        {

           printf("document of the wrong type, root node != ioMsg/n");

           xmlFreeDoc(doc);

           return -1;

        }

        curNode = curNode->children;

        while(curNode != NULL)

        {

           //取出节点中的内容

           szKey = xmlNodeGetContent(curNode);

           printf("Content value =%s/n", szKey);

           curNode = curNode->next;

         }

         xmlFreeDoc(doc);

        return 0;

    }

编译运行:

#gcc -o xmltest -I/usr/local/include/libxml2-L/usr/local/lib -lxml2 xmltest.c

#./xmltest

6 zlib安装与使用

zlib是提供数据压缩用的函式库,它使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。

6.1 zlib的安装

下载地址:http://www.zlib.net/zlib-1.2.8.tar.gz

安装说明参考:

 http://jingyan.baidu.com/article/29697b91321e2eab20de3c0d.html

$wget http://www.zlib.net/zlib-1.2.8.tar.gz

$tar -xvzf zlib-1.2.8.tar.gz

$cd zlib-1.2.8

$./configure

$make

$sudo make install

6.2 zlib的使用

zlib库提供了简洁高效的在内存中数据压缩和解压缩系列API函数,很多应用都会用到这个库,其中compress和uncompress函数是最基本也是最常用的。

6.2.1 compress

intcompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

@函数功能:compress函数将source 缓冲区中的内容压缩到 dest缓冲区。

@函数参数:sourceLen表示source缓冲区的大小(以字节计)。注意函数的第二个参数destLen 是传址调用。当调用函数时,destLen表示 dest缓冲区的大小,destLen> (sourceLen + 12)*100.1%。当函数退出后,destLen 表示压缩后缓冲区的实际大小。此时destLen / sourceLen 正好是压缩率。

@函数返回值:compress若成功,则返回 Z_OK;若没有足够内存,则返回Z_MEM_ERROR;若输出缓冲区不够大,则返回 Z_BUF_ERROR。

6.2.2 uncompress

intuncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

@函数功能:uncompress函数将source 缓冲区的内容解压缩到 dest缓冲区。

@函数参数:sourceLen是source 缓冲区的大小(以字节计)。注意函数的第二个参数destLen 是传址调用。当调用函数时,destLen表示 dest缓冲区的大小, dest缓冲区要足以容下解压后的数据。在进行解压缩时,需要提前知道被压缩的数据解压出来会有多大。这就要求在进行压缩之前,保存原始数据的大小(也就是解压后的数据的大小)。这不是 zlib函数库的功能,需要我们做额外的工作。当函数退出后,destLen 是解压出来的数据的实际大小。

@函数返回值:uncompress若成功,则返回 Z_OK;若没有足够内存,则返回Z_MEM_ERROR;若输出缓冲区不够大,则返回Z_BUF_ERROR。若输入数据有误,则返回Z_DATA_ERROR。

7 c-ares安装与使用

c-ares是一个用来异步的执行 DNS 请求和名字解析的 C 库。在lincurl库中用到它来进行DNS的异步解析。

7.1 c-ares安装

下载地址:http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz

 

# wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz

#tar zxvf c-ares-1.10.0.tar.gz

#cd c-ares-1.10.0

#./ buildconf

# autoconf configure.ac   //生成configure文件

#./configure  //默认安装到/usr/local/include和/usr/local/lib目录下

#make

#sudo make install

 

8 curl安装与使用

Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。

8.1 curl安装

下载地址:http://curl.haxx.se/download.html

安装说明参考:http://curl.haxx.se/docs/install.html

# wget http://curl.haxx.se/download/curl-7.42.1.tar.gz

#tar zxvf curl-7.42.1.tar.gz

#cd curl-7.42.1

#./configure --enable-ares --with-zlib=/usr/local

#make

#sudo make install

使用curl –version 查看使用版本是否一样

注意:(1)此次必须指定zlib的安装路径,因为有些网页采用gzip压缩,否则curl无法提供对gunzip的支持。

(2) --enable-ares表示使用c-ares的异步DNS解析

 

configure命令执行后的显示内容为:

8.2 curl使用

EasyInterface是libcurl提供的同步接口,  效率高,  容易使用, 推荐没有特殊需求的客户端应用均使用此类接口,主要接口如下:

函数名称

功能描述

1

curl_easy_init()

初始化获取一个handle

2

curl_easy_setopt()

设置传输选项

3

curl_easy_perform()

开始传输数据,由于是同步传输,因此线程会在此处堵塞。

4

curl_easy_getinfo()

在传输回调过程中或传输结束之后获取相关信息

5

curl_easy_cleanup()

清除handle

 

9 log4cxx安装与使用

Log4cxx是开放源代码项目Apache Logging Service的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。

9.1 log4cxx安装

         log4cxx依赖于apr和apr-util库,其中:

         log4cxx-0.10.0   地址:http://logging.apache.org/log4cxx/download.html

         apr-1.5.1和apr-util-1.5.4   地址:http://apr.apache.org/

 

#tar zxvf apache-log4cxx-0.10.0.tar.gz

#tar zxvf apr-1.5.1.tar.gz

#tar zxvf apr-util-1.5.4.tar.gz

 

#su root

 

#cd apr-1.5.1

#./configure --prefix=/usr/local/apr

#make

#make install

 

#cd apr-util-1.5.4

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

#make

#make install

 

#cd apache-log4cxx-0.10.0

#./configure --prefix=/usr/local/log4cxx \

 --with-apr=/usr/local/apr  \

--with-apr-util=/usr/local/apr-util  \

--with-charset=utf-8  \

--with-logchar=utf-8 

 

#make    //这里会出错错误解决请看下面

#make install

 

 

 

注意配置前需进行以下操作:

1).在 src/main/cpp/inputstreamreader.cpp的开头处增加#include <string.h>;

否则会出现

inputstreamreader.cpp:66: error: 'memmove' was not declared in this scope

make[3]: *** [inputstreamreader.lo] 错误 1

 

2).在 src/main/cpp/socketoutputstream.cpp的开头处增加#include <string.h>;

否则会出现

socketoutputstream.cpp:52: error: 'memcpy' was not declared in this scope

 

3).在src/examples/cpp/console.cpp的开头处增加#include <string.h>和#include <stdio.h>

否则会出现

console.cpp: In function ‘int main(int, char**)’:

console.cpp:58: 错误:‘puts’在此作用域中尚未声明

9.2 log4cxx使用

9.2.1 一个最简单的log4cxx示例

1)创建一个名为main.cpp文件,编写代如下:

 

/*FileName : main.cpp*/

#include "log4cxx/logger.h"

#include "log4cxx/propertyconfigurator.h"

using namespace log4cxx;

 

int  main  (int argc, char* argv[])

{

         //加载log4cxx的配置文件,这里使用了属性文件

         PropertyConfigurator::configure("log4cxx.properties");

 

         //获得一个Logger,这里使用了RootLogger

         LoggerPtr rootLogger = Logger::getRootLogger();

 

         //发出INFO级别的输出请求

         LOG4CXX_INFO(rootLogger, _T("它的确工作了"));

         //rootLogger->info(_T("它的确工作了")); //与上面那句话功能相当

 

         return 0;

}

3)在makefile中指定头文件所在的路径:-I/usr/local/log4cxx/include,

指定库文件所在的路径:-L /usr/local/lib,

最后指定程序链接所需要链接的库文件:-llog4cxx

然后进行编译。

4)新建一个文本文件,命名为log4cxx.properties,并键入如下内容:

# 设置root logger为DEBUG级别,使用了ca和fa两个Appender

log4j.rootLogger=DEBUG, ca, fa

 

#对Appender fa进行设置:

# 这是一个文件类型的Appender,

# 其输出文件(File)为./output.log,

# 输出方式(Append)为覆盖方式,

# 输出格式(layout)为PatternLayout

log4j.appender.fa=org.apache.log4j.FileAppender

log4j.appender.fa.File=./output.log

log4j.appender.fa.Append=false

log4j.appender.fa.layout=org.apache.log4j.PatternLayout

log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n

 

#对Appender ca进行设置:

# 这是一个控制台类型的Appender

#  输出格式(layout)为PatternLayout

log4j.appender.ca=org.apache.log4j.ConsoleAppender

log4j.appender.ca.layout=org.apache.log4j.PatternLayout

log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n

5)运行测试。

9.2.2 日志配置文件说明

通常使用配置文件来对Log4cxx进行配置,配置的主要内容就是上面的三点:等级,输出目的地,输出格式。

配置文件的基本格式如下:

 

#配置根Logger

log4j.rootLogger = [level], appenderName1, appenderName2,...

#配置日志输出目的地Appender

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

......

log4j.appender.appenderName.optionN = valueN

#配置日志信息的格式

log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1

......

log4j.appender.appenderName.layout.optionN = valueN

 

说明:

(1). [level]是日志的输出等级,共有5级:FATAL, ERROR, WARN, INFO, DEBUG

(2). Appender为日志输出的目的地,log4j提供的Appender有以下几种:

org.apache.log4j.ConsoleAppender (控制台)

org.apache.log4j.FileAppender (文件)

org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)

org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸时产生一个新的文件)

org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)

(3). Layout日志输出格式

org.apache.log4j.HTMLLayout (以HTML表格形式布局)

org.apache.log4j.Patternlayout (可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等信息)

(4)打印参数

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。

%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。

%r:输出自应用程序启动到输出该log信息耗费的毫秒数。

%t:输出产生该日志事件的线程名。

%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。

%c:输出日志信息所属的类目,通常就是所在类的全名。

%M:输出产生日志信息的方法名。

%F:输出日志消息产生时所在的文件名称。

%L::输出代码中的行号。

%m::输出代码中指定的具体日志信息。

%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。

%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

%%:输出一个"%"字符。

另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:

1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。

2)%-20c:"-"号表示左对齐。

3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格2.3 

 

10 gRPC安装与使用

请先安装:autoconf automake libtool

[ybtang@hadoop7 git]$sudo yum –y install autoconf automake libtool

[ybtang@hadoop7 git]$ git clone https://github.com/grpc/grpc.git

Initialized empty Git repository in/home/ybtang/git/grpc/.git/

remote: Counting objects: 68586, done.

remote: Compressing objects: 100% (14/14),done.

remote: Total 68586 (delta 4), reused 0(delta 0), pack-reused 68572

Receiving objects: 100% (68586/68586),45.02 MiB | 367 KiB/s, done.

Resolving deltas: 100% (52099/52099), done.

 

[ybtang@hadoop7 git]$ cd grpc/

[ybtang@hadoop7 grpc]$ ll

total 1620

-rw-rw-r--. 1 ybtang ybtang   49878 Aug 2517:13 BUILD

-rw-rw-r--. 1 ybtang ybtang   65406 Aug 2517:13 build.json

-rw-rw-r--. 1 ybtang ybtang     346 Aug 2517:13 composer.json

-rw-rw-r--. 1 ybtang ybtang    2243 Aug 2517:13 CONTRIBUTING.md

drwxrwxr-x. 3 ybtang ybtang    4096 Aug 2517:13 doc

drwxrwxr-x. 2 ybtang ybtang    4096 Aug 2517:13 etc

drwxrwxr-x. 3 ybtang ybtang    4096 Aug 2517:13 examples

-rw-rw-r--. 1 ybtang ybtang    4484 Aug 2517:13 grpc.bzl

-rw-rw-r--. 1 ybtang ybtang   32354 Aug 2517:13 gRPC.podspec

drwxrwxr-x. 4 ybtang ybtang    4096 Aug 2517:13 include

-rw-rw-r--. 1 ybtang ybtang    7126 Aug 2517:13 INSTALL

-rw-rw-r--. 1 ybtang ybtang    1475 Aug 2517:13 LICENSE

-rw-rw-r--. 1 ybtang ybtang 1425104 Aug 25 17:13 Makefile

-rw-rw-r--. 1 ybtang ybtang    1315 Aug 2517:13 PATENTS

-rw-rw-r--. 1 ybtang ybtang    5548 Aug 2517:13 README.md

drwxrwxr-x. 11 ybtang ybtang    4096 Aug 25 17:13 src

drwxrwxr-x. 5 ybtang ybtang    4096 Aug 25 17:13templates

drwxrwxr-x. 6 ybtang ybtang    4096 Aug 2517:13 test

drwxrwxr-x. 6 ybtang ybtang    4096 Aug 2517:13 third_party

drwxrwxr-x. 12 ybtang ybtang    4096 Aug 25 17:13 tools

drwxrwxr-x. 18 ybtang ybtang    4096 Aug 25 17:13 vsprojects

 

[ybtang@hadoop7 grpc]$ git submodule update --init

Initialized empty Git repository in/home/ybtang/git/grpc/third_party/openssl/.git/

remote: Counting objects: 172585, done.

remote: Compressing objects: 100%(379/379), done.

remote: Total 172585 (delta 35), reused 0(delta 0), pack-reused 172206

Receiving objects: 100% (172585/172585),68.60 MiB | 184 KiB/s, done.

Resolving deltas: 100% (136486/136486),done.

Submodule path 'third_party/openssl':checked out '33dd08320648ac71d7d9d732be774ed3818dccc5'

Initialized empty Git repository in/home/ybtang/git/grpc/third_party/protobuf/.git/

remote: Counting objects: 26405, done.

remote: Compressing objects: 100%(467/467), done.

remote: Total 26405 (delta 189), reused 0(delta 0), pack-reused 25912

Receiving objects: 100% (26405/26405),32.23 MiB | 183 KiB/s, done.

Resolving deltas: 100% (17852/17852), done.

Submodule path 'third_party/protobuf':checked out '3e2c8a5dd79481e1d36572cdf65be93514ba6581'

Initialized empty Git repository in/home/ybtang/git/grpc/third_party/zlib/.git/

remote: Counting objects: 4347, done.

remote: Total 4347 (delta 0), reused 0(delta 0), pack-reused 4347

Receiving objects: 100% (4347/4347), 3.54MiB | 694 KiB/s, done.

Resolving deltas: 100% (2584/2584), done.

Submodule path 'third_party/zlib': checkedout '50893291621658f355bc5b4d450a8d06a563053d'

 

[ybtang@hadoop7 grpc]$ chmod –R 777 *

[ybtang@hadoop7 grpc]$ make

[ybtang@hadoop7 grpc]$ sudo make install

 

11 MySQL-Client安装与使用

#sudo yum install mysql-devel

 

12 CentOS升级GCC到4.8.2

  原GCC版本:4.4.7;

  目标:升级GCC到4.8.2,以支持C++11

(1)获取GCC 4.8.2包:

#wgethttp://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz

 

(2)解压缩:

#tar -xf gcc-4.8.2.tar.gz

 

(3)进入到目录gcc-4.8.2,运行:

#./contrib/download_prerequisites

这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

 

(4)建立输出目录并到目录里:

#mkdir gcc-build-4.8.2

#cd gcc-build-4.8.2

#../configure -enable-checking=release -enable-languages=c,c++-disable-multilib

-enable-languages表示你要让你的gcc支持那些语言,-disable-multilib不生成编译为其他平台可执行代码的交叉编译器。-disable-checking生成的编译器在编译过程中不做额外检查,也可以使用-enable-checking=xxx来增加一些检查;

(5)编译,注意此步和上一步,比较耗时;

#make

(6)安装:

#make  install

(7)验证:

#gcc –v  或者g++ -v

如果显示的gcc版本仍是以前的版本,就需要重启系统;或者可以查看gcc的安装位置:which gcc;然后在查看版本 /usr/local/bin/gcc -v,通常gcc都安装在该处位置;

 

升级GCC后,运行某些程序,会出现:

/usr/lib64/libstdc++.so.6:version `GLIBCXX_3.4.15' not found

等错误,原因是没有GLIBCXX_3.4.15版本,或是更高的版本,输入命令查询一下结果:

[root@localhost ~]# strings/usr/lib/libstdc++.so.6 | grep GLIBCXX

13 libstatgrab 内存CPU监视

libstatgrab是一个提供平台统计信息的库,用C语言编写,可以统计CPU、内存、磁盘、进程、网络的数据。

安装包为:libstatgrab-0.90.tar.gz

安装过程如下:

#tar zxvf libstatgrab-0.90.tar.gz

#cd libstatgrab

#./configure

#make

#sudo make install

14安装Apache-PHP-mongo

(1)安装apache服务器

#yum install httpdhttpd-devel

         (2)安装PHP

#yum install php php-mysql php-common php-gdphp-mbstring php-mcrypt php-devel php-xml

phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,phpize是属于php-devel的内容,因此在centos中只要运行如下命令yum install php-devel即可安装phpize。

注意:如何在CentOS系统中把PHP 5.3.x更新到PHP 5.5.x

1.首页安装Webtatic EL6 YUM源

rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm 

2.停止web服务器

service httpd stop

3.删除当前的 php 安装 php5.5

yum remove php*

yum install php55w php55w-mysql php55w-common php55w-gd php55w-mbstring php55w-mcrypt php55w-devel php55w-xml

4.重启web服务器

service httpd restart

         (3)安装php-mongo扩展

# wgethttp://pecl.php.net/get/mongo-1.6.10.tgz

#cd mongo-1.6.10

#phpize

#./configure--enable-mongo=share--with-php-config=php-config

#make

#make test

#sudo make install

 

修改php.ini配置文件

#sudo vim /etc/php.ini

添加如下mongo驱动信息:

extension=mongo.so

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值