5

libmemcached编译安装报错解决记录

 3 years ago
source link: https://zhang.ge/5119.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
libmemcached编译安装报错解决记录 | 张戈博客
Jager · 3月5日 · 2017年web · 网站优化 · 网站加速 3114次已读

我负责的几个公司内部网站,仅集成了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版本即可(当然,若无异常也可以继续保留)。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK