libmemcached编译安装报错解决记录

我负责的几个公司内部网站,仅集成了 php 原生 memcache 组件,不支持 memcached 分片存储的自动容灾方案,近期出现过几例因 memcache 服务器故障引起 WEB 爆卡的尴尬事,所以接到了一个给现网 php 集成 memcached 模块的需求。

内部的个别系统有多老、多难用我就不吐槽了,slackware、suse 用过的人都知道。。。不说了,总之老老实实的编译安装吧。libmemcached编译安装报错解决记录

memcached 这个 php 模块依赖于 libmemcached,所以集成前先要编译安装 libmemcached。

按照常规编译方法,对 libmemcached 进行编译安装,结果如下报错:

error: cinttypes: No such file or directory

查了下资料,发现是因为 gcc 版本过低,看了下系统当前的 gcc 版本,是 4.1.2,决定升级之。

简单记录下 gcc 编译过程:

1、安装 gmp

2、安装 mpfr

4、安装 mpc

5、安装 gcc

对于这种老掉牙的服务器、程序,编译安装 gcc 的时候也不敢直接全局覆盖安装(编译不指定路径),于是将 gcc-4.5.1 安装到/usr/local/gcc-4.5.1

Ps:更多可选参数请参考官方文档。gcc 编译安装必须注意依赖包的顺序,可谓环环相扣。

编译安装后,由于是指定的安装路径,所以系统用的依然是原来的 gcc,所以为了本次编译 libmemcached,需要将新版本软链过去,暂时使用(简单方案)

进入 libmemcached 源码目录继续编译,结果如下报错:

error: bits/c++0x_warning.h: No such file or directory

error: cstdint: No such file or directory

error: tr1_impl/cinttypes: No such file or directory

真是醉人,明明都升级了还报错!没办法,继续耐着性子看信息,发现 libmemcached 在 configure 之后有如下统计信息:

libmemcached编译安装报错解决记录

赫然发现了图中还有个 c++显示是 4.1.2 的老版本!!!于是,原来把 c++给漏了,顺手补之:

再去编译安装,就行云流水,再无报错!后面编译 memcached 就不多说了,不会的可以参考前文教程。最后,记得取消 gcc 和 c++的软链接,还原到 4.1.2 版本即可(当然,若无异常也可以继续保留)。

评论已关闭!