步骤:
1,cygwin最新版本。
2,cygwin安装模块:gcc, make, openssl, pcre, readline, perl, wget, unzip, sqlite。(应该是全的,在后面编译安装软件的时候会提示缺少的模块或命令,后续可以再装的)
3,cygwin手工下载源码编译安装:luarocks, lua5.1.5, 然后运行luarocks install xx命令安装其他模块(如 lsqlite3)等。
4,ngx_openresty1.7.10.2编译安装。参照(http://www.makaidong.com/149671.html)。
遇到的问题及解决过程:
1,luarocks install命令是默认使用wget工具来下载的,没装的话会报获取manifest文件失败,没装unzip的话则报解压manifest文件失败。
2,编译lua_cjson中报: 函数"lua_xxx"未定义的引用。lua_xx函数出现多,是由于没有找到lua动态库,将liblua.a拷到/usr/local/lib/liblua.a下即可编译了。中间被折腾的没办法了,最终尝试用luarocks install lua_cjson 来安装,发现安装参数后面多了一个-llua。查看gcc命令得知,-L是查找库路径,而-l是加载库的。库默认路径为/usr/local/lib。可修改makefile文件,指定lua库路径并加载库(-L/usr/local/lib -llua)。修改openresty/bundle中的lua-cjson,lua-rds,lua-redis三个的Makefile文件。
3,编译通过,安装报"crypto函数未定义的引用"。经查和看代码发现,crypto函数属openssl包中的,那么也是由于这个库没有加载,导致编译失败。于是查找libcrypto.a,拷到/usr/local/lib下。
4,经过一番折腾,也不知是安装了什么东东,竟然按照步骤4帖子的编译步骤,顺利编译通过和运行了。之前可是一直不行的。
5,openresty使用系统的lua来编译运行。调用cjson和lsqlite3模块报错:dynamic libraries not enabled; check your Lua installation 追述原因就是没有编译动态库加载,这样我们修改lua源码文件下的 src/Makefile文件找到posix修改成这样:
posix:
#$(MAKE) all MYCFLAGS=-DLUA_USE_POSIX
$(MAKE) all MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-ldl"
体会:
1,学如逆水行舟,每前进一步都是需要努力的。