WEB应用

libmemcached编译安装报错解决记录

Jager · 3月5日 · 2017年 · · 4115次已读

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

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

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 之后有如下统计信息:

libmemcached编译安装报错解决记录

赫然发现了图中还有个 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 版本即可(当然,若无异常也可以继续保留)。

27 条回应
  1. Marnger's blog 2017-3-5 · 17:23

    感谢博主的分享,受教了!

  2. 明月登楼 2017-3-5 · 17:45

    终于可以抢个沙发了! :grin: :wink: :mrgreen:

  3. 玉满斋 2017-3-5 · 17:47

    我再来抢个板凳先! :wink: :idea:

  4. 网赚 2017-3-5 · 17:53

    多谢分享啊

  5. 明月登楼 2017-3-6 · 1:19

    恩,看完了,好高深呀!看了个一知半解,我最烦的就是手动编译了!NND,好像从来就没有一次过的样子!囧! :shock: :???:

    • Win7en乐园 2017-4-6 · 18:53

      全是干货,感觉不错。

  6. 灯芯绒面料 2017-3-6 · 18:15

    好难啊,看不懂。。

  7. Koolight 2017-3-6 · 20:50

    看来是腾讯的内部网站啊!

  8. 美剧天堂网 2017-3-7 · 16:30

    看完了,对memcache不是太了解,听说这个软件有点耗内存,没有redis轻便

  9. aunsen 2017-3-8 · 15:17

    对于编译简直一窍不通啊 :arrow:

  10. 开拓者博客 2017-3-10 · 19:30

    受教了,不错不错

  11. 电脑问题网 2017-3-12 · 2:07

    来我这看看

  12. DaYkor 2017-3-25 · 2:38

    博主,强迫症患者求教一个问题,爬了很多文也没找到解决方法,用了WP Super Cache缓存插件后,文章的阅读数就不增加了,而且我看你的博客应该用的是自己写的缓存代码,但也一样不增加阅读数,或者说实际阅读数远不止页面显示的,深夜求教,看有没空研究解决下,感谢!

  13. 英语论文代写 2017-3-27 · 20:26

    在这里学习了

  14. harries 2017-3-27 · 23:16

    来访了。哈哈哈

  15. 营销软件大全 2017-3-28 · 11:56

    前来学习一下 网站做的真好签到成功!签到时间:上午11:55:29,每日签到,生活更精彩哦~

  16. 简单生活 2017-3-28 · 12:58

    大神好久没更新了,赶紧来干货。

  17. 明月学习笔记Blog 2017-4-1 · 17:11

    嘿嘿,我又弄个小站,过来露个脸先!

  18. 外链工具 2017-4-4 · 20:19

    关于服务器这方面的,感觉太高深了。

  19. 韩威博客 2017-4-7 · 15:45

    memcached 缓存在php中用的还是比较多。。。

  20. 电动螺旋压力机 2017-4-10 · 13:47

    您好,您的网站做的很不错,很漂亮,我已经收藏了,方便我随时访问,请问您要换友情链接吗?

    我的是 http://www.yaliji.cn/ 关键词是:压力机

  21. 宣传册设计 2017-4-11 · 16:46

    感谢博主的分享,受教了!

  22. IT豆子 2017-4-23 · 13:39

    学习了解下

  23. 向晚 2017-5-3 · 22:23

    超喜欢这里,里面个个都是人才,说话又好听

  24. IT豆子 2017-5-9 · 8:18

    感谢分享,学习了。

  25. 宝宝计划客户端 2017-5-19 · 0:41

    技术的东西我不懂

  26. 恋爱一生 2017-6-12 · 21:46

    来过。。。