前阵子开发的nodejs验证码模块ccap,已经有一些用户了,他们反映在部分linux机器上无法安装,特别是使用类似jitusu等云平台的机器。经过测试发现是ccap模块从远端获取libjpeg库然后解压缩编译时出的问题。可能是没有权限去自行make和make install导致的,既然这样我就打算将libjpeg库直接植入ccap模块,让libjpeg和cimg库一起编译。
由于大部分用户的生产环境都是linux,所以这里只打算对linux做libjpeg的支持,windows下用户还是用bmp吧。
首先我们要找到libjpeg需要编译那些文件,打开makefile.in文件,在296行,列举了需要编译的源文件:
Sources to build library
LIBSOURCES = jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \
jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \
jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \
jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \
jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \
jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \
jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \
jquant2.c jutils.c jmemmgr.c @[email protected]
System dependent sources
SYSDEPSOURCES = jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c //拷第一个即可
于是我们只需要把这些文件拷贝出来,这里别自己拷贝啊,用linux的cp命令即可,然后将所有的.h文件也拷贝到这个文件夹中,我们改名为source文件夹,最后执行一下
gcc -o libjpeg.so -fPIC -shared .c
发现生成出来的libjpeg.so是可以被我们cimg正常使用的,于是就是体力活了,将上面这些文件全部放入binding.gyp文件中,最后得到一个很长的数组:
[“OS==\”linux\””, {
“sources”: [“addon/jpeglib/jaricom.c”, “addon/jpeglib/jcapimin.c”, “addon/jpeglib/jcapistd.c”,
“addon/jpeglib/jcarith.c”,”addon/jpeglib/jccoefct.c”,
“addon/jpeglib/jccolor.c”,”addon/jpeglib/jcdctmgr.c”,
“addon/jpeglib/jchuff.c”, “addon/jpeglib/jcinit.c”, “addon/jpeglib/jcmainct.c”,
“addon/jpeglib/jcmarker.c”,
“addon/jpeglib/jcmaster.c”, “addon/jpeglib/jcomapi.c”, “addon/jpeglib/jcparam.c”,
“addon/jpeglib/jcprepct.c”, “addon/jpeglib/jcsample.c”, “addon/jpeglib/jctrans.c”,
“addon/jpeglib/jdapimin.c”, “addon/jpeglib/jdapistd.c”,
“addon/jpeglib/jdarith.c”, “addon/jpeglib/jdatadst.c”,
“addon/jpeglib/jdatasrc.c”, “addon/jpeglib/jdcoefct.c”,
“addon/jpeglib/jdcolor.c”, “addon/jpeglib/jddctmgr.c”,
“addon/jpeglib/jdhuff.c”, “addon/jpeglib/jdinput.c”,
“addon/jpeglib/jdmainct.c”, “addon/jpeglib/jdmarker.c”,
“addon/jpeglib/jdmaster.c”, “addon/jpeglib/jdmerge.c”,
“addon/jpeglib/jdpostct.c”, “addon/jpeglib/jdsample.c”,
“addon/jpeglib/jdtrans.c”, “addon/jpeglib/jerror.c”,
“addon/jpeglib/jfdctflt.c”,”addon/jpeglib/jfdctfst.c”,
“addon/jpeglib/jfdctint.c”, “addon/jpeglib/jidctflt.c”,
“addon/jpeglib/jidctfst.c”, “addon/jpeglib/jidctint.c”,
“addon/jpeglib/jquant1.c”, “addon/jpeglib/jquant2.c”,
“addon/jpeglib/jutils.c”, “addon/jpeglib/jmemmgr.c”,
“addon/jpeglib/jmemnobs.c”,
“addon/hcaptha.cc” ,”addon/cap.cc”],
“libraries”: [],
“cflags_cc”: [“-fexceptions”,”-Dcimg_display=0”,”-Dcimg_use_jpeg”,”-L/usr/X11R6/lib”,”-lm”,”-lpthread”,”-lX11”]
}]
于是我们进行编译,node-gyp rebuild就可以正常的在cimg库中使用libjpeg库的东西了。
轻量级便携nodejs验证码,ccap安装方法
npm install ccap
项目地址
https://github.com/DoubleSpout/ccap