Proxygen编译安装和开发环境的搭建
2017-08-07 10:47
2386 查看
Proxygen是facebook开源的高性能的http框架,它和thriftrpc一起,构成一套http和rpc的访问的姊妹框架。由于项目的选用了thrift作为rpc框架,所以采用proxygen作为对外提供http服务的框架。
首先,下载proxygen源码,地址:
https://github.com/facebook/proxygen
运行deps.h脚本,该脚本首先安装proxygen的所有依赖包,然后生成编译配置,最后编译
./deps.sh
最后在编译过程中出现问题:
/usr/include/glog/logging.h:672: undefined reference to
`google::base::CheckOpMessageBuilder::NewString()
编译glog时报错。该问题还是由于本机编译器时gcc-4.9,安装的glog包采用gcc-5.0以上版本的编译器编译导致的,解决的办法就是重新下载glog源码,采用gcc-4.9的编译器重新编译安装。
https://derickrethans.nl/hhvm-gcc-52.html
这理由详细的编译步骤,请参考。
重编glog之后,请记住确认新编译版本的安装路径以及/usr/include和/usr/lib目录下是否有之前安装的过的glog的相关库和头文件,如果有请删除,否则依然会报错,因为系统编译时会优先查找这些路径,(关于编译链接和运行时的搜索路径的方式以及通过ldconfig配置搜索路径的方法,请自行百度)
重新运行deps.sh,在folly 检查依赖库时报错,glog库不可用,查看 folly/folly/config.log日志,其中由如下报错:
undefined reference to `gflags::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)
这个函数时glog依赖的gflags中的函数,去gflags头文件的安装目录/usr/include/gflags下查看gflags.h文件,函数的定义时这样的:
很显然glog中的引用多了一个参数,应该是glog和gflags的版本不匹配导致的。所以gflags也要下载和glog对应的版本重新编译安装。我是直接在git拉最新的glog和gflags版本重新编译的,参考:
http://www.cnblogs.com/burningTheStar/p/6986048.html
这里有一个问题,folly在glog链接gflags时采用的是动态库连接,但是gflags在cmake编译时默认是静态库安装,所以安装之后folly检查依赖时依然会报找不到gflags的错误。gflags编译成动态库需要使用ccmake配置:
1,ccmake ..
(高版本的cmake没有ccmake工具,我本身是cmake-3.6.1,重新安装了cmake-3.5.1之后才可使用ccmake)
执行ccmake之后会有这样一个配置界面,把动态库选项设为on
2,cmake .. && make install
最后记得删除之前安装的gflags版本
解决以上问题之后,终于可以正常编译,但最后依然有编译错误 。。。。
virtual memory exhausted: Cannot allocate memory
系统虚拟内存不足,分配空间失败了。。。
(计算机的物理内存时有限的,为了有效利用资源,操作系统通过虚拟内存的方式,跟物理内存建立映射,通过数据换入换出的方式以有效提高物理内存的利用率,节约内存资源。关于操作系统内存管理,可以看看程序员自我修养和深入理解计算机操作系统,有详细的讲解)
用free -k 查看我的磁盘
我的虚拟机没有swap分区,我没有创建swap分区,而是采用创建一个swap文件,以增加虚拟内存的置换空间,参考这篇:
http://blog.csdn.net/finewind/article/details/50824410
最后再次执行deps.sh,终于大功告成^^
编译结果
安装路径:
我们来按git上给出的方法测试一下proxygen源码里面echoserver示例:
编译:
g++ -std=c++14 -o my_echo EchoServer.cpp EchoHandler.cpp
-lproxygenhttpserver -lfolly -lglog -lgflags -pthread
运行:
新开一个终端,访问echoserver:
首先,下载proxygen源码,地址:
https://github.com/facebook/proxygen
运行deps.h脚本,该脚本首先安装proxygen的所有依赖包,然后生成编译配置,最后编译
./deps.sh
最后在编译过程中出现问题:
/usr/include/glog/logging.h:672: undefined reference to
`google::base::CheckOpMessageBuilder::NewString()
编译glog时报错。该问题还是由于本机编译器时gcc-4.9,安装的glog包采用gcc-5.0以上版本的编译器编译导致的,解决的办法就是重新下载glog源码,采用gcc-4.9的编译器重新编译安装。
https://derickrethans.nl/hhvm-gcc-52.html
这理由详细的编译步骤,请参考。
重编glog之后,请记住确认新编译版本的安装路径以及/usr/include和/usr/lib目录下是否有之前安装的过的glog的相关库和头文件,如果有请删除,否则依然会报错,因为系统编译时会优先查找这些路径,(关于编译链接和运行时的搜索路径的方式以及通过ldconfig配置搜索路径的方法,请自行百度)
重新运行deps.sh,在folly 检查依赖库时报错,glog库不可用,查看 folly/folly/config.log日志,其中由如下报错:
undefined reference to `gflags::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)
这个函数时glog依赖的gflags中的函数,去gflags头文件的安装目录/usr/include/gflags下查看gflags.h文件,函数的定义时这样的:
template <typename FlagType> FlagRegisterer(const char* name, const char* help, const char* filename, FlagType* current_storage, FlagType* defvalue_storage);
很显然glog中的引用多了一个参数,应该是glog和gflags的版本不匹配导致的。所以gflags也要下载和glog对应的版本重新编译安装。我是直接在git拉最新的glog和gflags版本重新编译的,参考:
http://www.cnblogs.com/burningTheStar/p/6986048.html
这里有一个问题,folly在glog链接gflags时采用的是动态库连接,但是gflags在cmake编译时默认是静态库安装,所以安装之后folly检查依赖时依然会报找不到gflags的错误。gflags编译成动态库需要使用ccmake配置:
1,ccmake ..
(高版本的cmake没有ccmake工具,我本身是cmake-3.6.1,重新安装了cmake-3.5.1之后才可使用ccmake)
执行ccmake之后会有这样一个配置界面,把动态库选项设为on
2,cmake .. && make install
最后记得删除之前安装的gflags版本
解决以上问题之后,终于可以正常编译,但最后依然有编译错误 。。。。
virtual memory exhausted: Cannot allocate memory
系统虚拟内存不足,分配空间失败了。。。
(计算机的物理内存时有限的,为了有效利用资源,操作系统通过虚拟内存的方式,跟物理内存建立映射,通过数据换入换出的方式以有效提高物理内存的利用率,节约内存资源。关于操作系统内存管理,可以看看程序员自我修养和深入理解计算机操作系统,有详细的讲解)
用free -k 查看我的磁盘
我的虚拟机没有swap分区,我没有创建swap分区,而是采用创建一个swap文件,以增加虚拟内存的置换空间,参考这篇:
http://blog.csdn.net/finewind/article/details/50824410
最后再次执行deps.sh,终于大功告成^^
编译结果
安装路径:
我们来按git上给出的方法测试一下proxygen源码里面echoserver示例:
编译:
g++ -std=c++14 -o my_echo EchoServer.cpp EchoHandler.cpp
-lproxygenhttpserver -lfolly -lglog -lgflags -pthread
运行:
新开一个终端,访问echoserver:
相关文章推荐
- 如何搭建android的开发环境 虚拟机和ubuntu的安装与建立编译条件
- ubuntu 11.04下搭建android开发/编译环境 安装必要工作用软件
- thriftrpc编译安装和开发环境的搭建
- Android 开发环境搭建---Android 编译需要的sun-java5-jdk在ubuntu10.04以上版本的安装问题
- 如何搭建android的开发环境 虚拟机和ubuntu的安装与建立编译条件
- windows7搭建基于VIM的开发环境(2)-编译64位且支持python的VIM版本并安装
- 开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境
- Win10环境下Openssl的编译安装以及在vs2013上开发环境的搭建
- Ubuntu开发环境搭建(2)【安装arm-linux-gcc-4.4.3交叉编译环境】
- 开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境
- Ubuntu 14.04 安装搭建Android开发编译环境
- EOS开发环境搭建,如何编译安装构建EOSIO
- Android Studio 开发环境的搭建与安装
- Ubuntu 14.04.3安装AndroidStudio搭建Android开发环境
- MTX20开发环境搭建,源代码下载、编译、xflash下载、运行
- 开源机器学习C++库Shark的编译与开发环境搭建
- Pixhawk交叉编译开发环境的搭建
- s3c2410上搭建QT/Embedded4.8.5开发环境(二)--安装arm平台qt库qt-everywhere-opensource-src-4.8.5
- LNAMP服务器环境搭建(手动编译安装)
- Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】