Gearman::XS在Centos下的编译安装方法
本文简述了Gearman::XS在Centos下编译安装方法,供大家参考学习一下!
目前Gearman能够支持各种语言,其官网的描述如下:
LanguageBindings/Drivers/Frameworks Selectyourlanguage–crosslinkstodownloadsectionwhichdetailsallyouroptions. C,C#/.NET,Go,Java,Lisp,Nodejs,PHP,Perl,Python,Ruby,DatabaseUDFs.
个人尝试了C、python、perl三种语言的API,感觉perl的API功能相对来说齐全一点。Gearman::XS是perl的开源支持。其链接如下:http://search.cpan.org/~krow/Gearman-XS/
在RHEL5.7下安装的Gearman::XS,中间会出现各种问题,此处给出这些问题的解决方法供大家参考。
首先,我使用了cpanm来安装Gearman::XS,结果如下:
[@localhostyunfei]#cpanmGearman::XS -->WorkingonGearman::XS Fetchinghttp://www.cpan.org/authors/id/K/KR/KROW/Gearman-XS-0.15.tar.gz...OK ConfiguringGearman-XS-0.15...OK BuildingandtestingGearman-XS-0.15...FAIL !InstallingGearman::XSfailed.See/root/.cpanm/work/1392343258.18128/build.logfordetails.Retrywith--forcetoforceinstallit.
显然force强制安装肯定是不行的,所以就找原因。查看/root/.cpanm/work/1392343258.18128/build.log文件,发现其中有如下的提示:
gcc-c-Wall-Wundef-Wno-shadow-Wmissing-prototypes-fdiagnostics-show-option-Wformat=2-Wstrict-aliasing-Wextra-Wmissing-declarations-Wcast-align-Wswitch-default-Wswitch-enum-Wno-undef-Wno-unused-value-Wno-unused-variable-Wno-unused-parameter-Wno-format-invalid-specifier-O2-g-pipe-Wall-Wp,-D_FORTIFY_SOURCE=2-fexceptions-fstack-protector--param=ssp-buffer-size=4-m64-mtune=generic-DVERSION=\"0.15\"-DXS_VERSION=\"0.15\"-fPIC"-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE"XS.c cc1:error:unrecognizedcommandlineoption"-Wno-format-invalid-specifier" make:***[XS.o]Error1 ->FAILInstallingGearman::XSfailed.
看到是在编译的时候出了问题,所以,咱们切换到它的编译目录(即/root/.cpanm/work/1392343258.18128/这个目录)
cd/root/.cpanm/work/1392343258.18128/Gearman-XS-0.15
然后执行make命令,就可以看到上面报的编译错误了。ok,下面就着手解决它。
viMakefile
可以找到:
CCFLAGS=-Wall-Wundef-Wno-shadow-Wmissing-prototypes-fdiagnostics-show-option-Wformat=2-Wstrict-aliasing-Wextra-Wmissing-declarations-Wcast-align-Wswitch-default-Wswitch-enum-Wno-undef-Wno-unused-value-Wno-unused-variable-Wno-unused-parameter-Wno-format-invalid-specifier
删掉最后的“-Wno-format-invalid-specifier”这个选项,然后保存退出,再次执行make。
会发现报出如下错误:
InfileincludedfromXS.xs:11: gearman_xs.h:18:36:error:libgearman-1.0/gearman.h:Nosuchfileordirectory XS.c:Infunction'XS_Gearman__XS_strerror': XS.c:229:error:'gearman_return_t'undeclared(firstuseinthisfunction) XS.c:229:error:(Eachundeclaredidentifierisreportedonlyonce XS.c:229:error:foreachfunctionitappearsin.) XS.c:229:error:expected';'before'rc' XS.xs:82:warning:implicitdeclarationoffunction'gearman_strerror' XS.xs:82:error:'rc'undeclared(firstuseinthisfunction) XS.xs:82:warning:assignmentmakespointerfromintegerwithoutacast make:***[XS.o]Error1
很明显,是找不到gearman.h,也就是说需要gearman-devel,正常情况下通过yum直接安装gearman-devel包就可以解决这个问题,但是,我的rhel是手动安装的Gearman-1.1.11版本,和yum安装的版本不一致,所以,再次打开并修改Makefile。
找到INC以及LDDLFLAGS,修改为如下内容:
LDDLFLAGS=-shared-O2-g-pipe-Wall-Wp,-D_FORTIFY_SOURCE=2-fexceptions-fstack-protector--param=ssp-buffer-size=4-m64-mtune=generic-L/usr/local/gearman/lib/-lgearman INC=-I/usr/local/gearman/include/-L/usr/local/gearman/lib/
可以看到就是加入了Gearman的incule以及lib相关的东西。保存退出Makefile,再次执行make,顺利通过,然后makeinstall就安装完毕了。