Proxygen编译安装和开发环境的搭建
来源:互联网 发布:贵金属交易软件排行 编辑:程序博客网 时间:2024/06/05 13:45
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文件,函数的定义时这样的:
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:
- Proxygen编译安装和开发环境的搭建
- thriftrpc编译安装和开发环境的搭建
- proxygen在mac上的编译
- centos65 安装 脸书的proxygen
- 如何搭建android的开发环境 虚拟机和ubuntu的安装与建立编译条件
- 如何搭建android的开发环境 虚拟机和ubuntu的安装与建立编译条件
- 完整的android开发环境搭建和源代码编译过程
- 完整的android开发环境搭建和源代码编译过程 .
- Bitblaze环境搭建之TEMU/Tracecap的编译和安装
- Bitblaze环境搭建之vine的编译和安装
- Android编译环境的搭建和编译
- Win10环境下Openssl的编译安装以及在vs2013上开发环境的搭建
- 搭建开发编译环境
- PHP开发环境的搭建和使用② 自定义安装
- Java开发环境搭建-JDK的下载和安装
- Pixhawk交叉编译开发环境的搭建
- Pixhawk交叉编译开发环境的搭建
- LAMP环境的搭建(编译安装)
- 【旋转卡壳】poj 2187 Beauty Contest
- 日历控件
- B
- 安卓常用方法和布局总结
- 启动hdfs后,一个datanode缺失
- Proxygen编译安装和开发环境的搭建
- layer iframe层的使用,传参
- json-server+mockjs 模拟REST接口
- [FAQ03426]android 4.4当系统存在多个Launcher时,如何设 置开机自动进入默认的Launcher?
- Javascript 多浏览器兼容性问题及解决方案
- Docker笔记
- Scala构造顺序 提前定义
- Springboot基础篇(二) 简单的增删改查
- HDU 6084 | 2017百度之星资格赛 1005 卡特兰数 + 分块打表