1 前言

Proxygen是Facebook开源的一个C++ HTTP服务器框架. 最近想安装到Ubuntu14.04的机子上时, 遇到了好多坑, 写篇博客记录一下.

首先下载Proxygen

$ git clone git@github.com:facebook/proxygen.git

安装说明文档, 只要执行deps.sh就行了

$ cd proxygen
$ ./deps.sh

这个脚本首先apt-get了一大堆东西, 然后clone了folly到本地, 到这里一切顺利, 然后就开始出现各种问题了.

2 folly

首先是编译folly的过程中, 出现如下错误

configure.ac:38: warning: macro 'AM_PROG_LIBTOOL' not found in library
configure.ac:38: error: possibly undefined macro: AM_PROG_LIBTOOL

看样子是LIBTOOL没找到, 但是实际上我已经安装了libtool. 网上找了半天, 最终发现原来是安装libtool是, libtool.m4等文件复制到了另一个aclocal文件夹中, 而系统目前用的aclocal并不会查找这个文件夹. 解决方法是, 首先查看当前的aclocal会查找那个目录. 在folly/folly目录下执行

$ aclocal --verbose

然后从输出中找到一个看上去类似/usr/local/share/aclocal-1.15/的目录. 就是aclocal查找的目录了.

然后就是找到libtool.m4安装到了哪里, 执行

$ sudo find / -name libtool.m4

找到一个类似/usr/share/aclocal/的目录, 将里面的所有m4后缀的文件复制到刚刚的/usr/local/share/aclocal-1.15/中. 重新执行deps.sh脚本, 编译folly 就没问题了.

3 wangle

编译wangle的过程中, 由于依赖了gmock, 编译脚本首先回去下载gmock, 这时候就出现了一个问题, 说是下载失败, 查看log之后发现:

protocol "https" not supported or disabled in libcurl

看样子是libcurl不支持https协议, 网上一查发现是编译curl的时候没有添加–with-ssl选项. 重新编译curl还是不行, 仔细一看是libcurl而不是curl, 于是下载libcurl-openssl-dev, 然后仍然是这个问题. 最后索性按照log的链接网上直接下载gmock. 但是光下载到对应目录, 编译的时候仍然会去下载一遍. 所以需要修改wangle/wangle/gmock/src/gmock-stamp/gmock-configure-.cmake, 将最上面那段下载的脚本删去. 重新在wangle目录下执行make命令就能编译gmock.

然而编译完了gmock在编译wangle的过程中又出现了问题:

undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
error adding symbols: DSO missing from command line

这是由于ld版本>=2.22. 需要修改编译脚本, 增加-lpthread选项. 对于wangle 来说, 就是修改wangle/wangle目录下的CMakeLists.txt, 找到target_link_libraries这一项, 增加一条-lpthread即可.

重新在wangle/wangel目录下运行make及make install, wangle编译完成.

4 proxygen

以上两个依赖库完成之后, 继续安装proxygen. 可以继续使用deps.sh从头编译, 也可以打开deps.sh, 找到最后几行编译proxygen的命令执行:

$ autoreconf -ivf
$ ./configure
$ make

这时, 在make的过程中又要下载gmock, 还是原来的错误. 手动将各个的gmock复制到指定目录后(lib/test/), 修改lib/test/Makefile, 找到

wget https://googlemock.googlecode.com/files/gmock-1.7.0.zip
unzip gmock-1.7.0.zip

将第一行注释掉, 重新make. 这时又会提示unzip出了什么什么问题, 但是明明unzip成功了. 继续修改刚刚的makefile, 将第二行也注释了. 重新make, 然后make install就能成功安装proxygen了.

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>