赞
踩
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 |
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。
#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; } |
#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; } |
下载地址:
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目录下
测试: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
输出:
在安装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
#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; }
} |
Libxml2库提供了C语言解析和构造xml文档的接口,为后台C语言处理程序和前台应用程序提供了一种通用的通迅方式。这里以libxml2-2.8.0.tar.gz为例。
下载地址: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子目录下;
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
zlib是提供数据压缩用的函式库,它使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。
下载地址: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 |
zlib库提供了简洁高效的在内存中数据压缩和解压缩系列API函数,很多应用都会用到这个库,其中compress和uncompress函数是最基本也是最常用的。
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。
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。
c-ares是一个用来异步的执行 DNS 请求和名字解析的 C 库。在lincurl库中用到它来进行DNS的异步解析。
下载地址: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 |
Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。
下载地址: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命令执行后的显示内容为:
EasyInterface是libcurl提供的同步接口, 效率高, 容易使用, 推荐没有特殊需求的客户端应用均使用此类接口,主要接口如下:
# | 函数名称 | 功能描述 |
1 | curl_easy_init() | 初始化获取一个handle |
2 | curl_easy_setopt() | 设置传输选项 |
3 | curl_easy_perform() | 开始传输数据,由于是同步传输,因此线程会在此处堵塞。 |
4 | curl_easy_getinfo() | 在传输回调过程中或传输结束之后获取相关信息 |
5 | curl_easy_cleanup() | 清除handle |
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。
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’在此作用域中尚未声明 |
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)运行测试。
通常使用配置文件来对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
请先安装: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
#sudo yum install mysql-devel
原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
libstatgrab是一个提供平台统计信息的库,用C语言编写,可以统计CPU、内存、磁盘、进程、网络的数据。
安装包为:libstatgrab-0.90.tar.gz
安装过程如下:
#tar zxvf libstatgrab-0.90.tar.gz
#cd libstatgrab
#./configure
#make
#sudo make install
(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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。