libmemcached编译安装报错解决记录

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

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

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

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

error: cinttypes: No such file or directory

In file included from ./libmemcached/common.h:114,
                 from ./libmemcached/csl/common.h:50,
                 from libmemcached/csl/context.cc:38:
./libmemcached-1.0/memcached.h:46:23: error: cinttypes: No such file or directory
make[1]: *** [libmemcached/csl/libmemcached_libmemcached_la-context.lo] 错误 1
make[1]: Leaving directory `/usr/local/src/libmemcached-1.0.18'
make: *** [all] 错误 2

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

简单记录下 gcc 编译过程:

1、安装 gmp

wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2
tar xvf gmp-6.0.0a.tar.bz2
cd gmp-6.0.0
./configure --prefix=/usr/local/gmp
make -j4
make install

2、安装 mpfr

wget http://www.mpfr.org/mpfr-current/mpfr-3.1.3.tar.bz2
tar xvf mpfr-3.1.3.tar.bz2
cd mpfr-3.1.3
./configure --with-gmp=/usr/local/
gmp --prefix=/usr/local/mpfr
make -j4
make install

4、安装 mpc

wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
tar xvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure --with-mpfr=/usr/local/mpfr \
    --with-gmp=/usr/local/gmp \
    --prefix=/usr/local/mpc
make -j4
make install

5、安装 gcc

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

wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.5.1/gcc-4.5.1.tar.gz
tar xvf gcc-4.5.1.tar.gz
cd gcc-4.5.1
./configure --prefix=/usr/local/gcc-4.5.1 \
--with-mpc=/usr/local/mpc \
--with-mpfr=/usr/local/mpfr \
--with-gmp=/usr/local/gmp
# 根据CPU个数开启多线程编译,加快速度
make -j4
make install

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

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

mv /usr/bin/gcc /usr/bin/gcc.old
ln -sf /usr/local/gcc-4.5.1/bin/gcc /usr/bin/gcc

进入 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

In file included from ./libmemcached-1.0/memcached.h:46,
                 from ./libmemcached/common.h:114,
                 from ./libmemcached/csl/common.h:50,
                 from libmemcached/csl/context.cc:38:
/usr/local/gcc-4.5.1/include/c++/4.5.1/cinttypes:35:33: error: bits/c++0x_warning.h: No such file or directory
/usr/local/gcc-4.5.1/include/c++/4.5.1/cinttypes:42:19: error: cstdint: No such file or directory
/usr/local/gcc-4.5.1/include/c++/4.5.1/cinttypes:64:32: error: tr1_impl/cinttypes: No such file or directory
make[1]: *** [libmemcached/csl/libmemcached_libmemcached_la-context.lo] 错误 1
make[1]: Leaving directory `/usr/local/src/libmemcached-1.0.18'
make: *** [all] 错误 2

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

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

mv /usr/bin/c++ /usr/bin/c++.old
ln -sf /usr/local/gcc-4.5.1/bin/c++ /usr/bin/c++

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小文网

查看QQ闪照的方法

来源http://www.xiaowennet.com/Study/date20180722-id101.html

76040
来自专栏安全领域

使用JavaScript开发物联网设备也会非常安全

本文将引导你完成一个练习,向你展示如何在 IoTivity 安全框架上使用 Java 对 OCF 设备进行快速原型设计。

521100
来自专栏猛牛哥的博客

centos安装aria2

2.4K30
来自专栏容器云生态

Openstack平台搭建之第一天 基于RDO方式搭建

openstck基于web方式的rdo部署 If you have any question ,please contact me by weichuangxx...

351100
来自专栏魏艾斯博客www.vpsss.net

WP-Optimize 插件安装使用教程-WordPress 数据库优化效果明显

40740
来自专栏张戈的专栏

WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存

上一篇文章分享了WordPress 发布文章评论自动刷新腾讯云 CDN 的教程,而博客现在还用到了 VeryCloud 的 CDN,正好有朋友在文章后面留言说 ...

35790
来自专栏惨绿少年

企业架构规划及服务器优化参数

第1章 企业架构规划 1.1 架构图 ? 1.1.1 用户访问网站组成 类型 作用 实现方式 顾客-用户 访问网站的人员 ...

34800
来自专栏蜉蝣禅修之道

ssh隧道与代理

37840
来自专栏从零开始学自动化测试

git+jenkins在windows机器上新建一个slave节点

前言 我们在跑自动化项目的时候,希望有单独的测试机能跑自动化项目,并且能集成到jenkins上构建任务。如果公司已经有jenkins环境了,那无需重新搭建。 只...

47860
来自专栏F-Stack的专栏

F-Stack Q&A 第一期

Q1:F-Stack有中断模式吗,有计划支持吗?在计算密集型的应用中,轮询模式会占用更多的CPU资源? A1:F-Stack暂时只支持轮询模式,后续会支持中断+...

78750

扫码关注云+社区

领取腾讯云代金券