您好!这个建议 agentzh 在代码中使用 ngx_open_file, ngx_close_file 等跨平台的函数代替 fopen, fclose 等函数就不会有问题了。目前我是修改函数接口,传入 filename 参数,然后修改那一行代码为:if (ngx_file_info((u_char*)filename, &fi) == NGX_FILE_ERROR) 另外,您是如何在Windows下编译nginx的?哪个 nginx 的版本?Richard ChenOn Mon, Oct 8, 2012 at 5:44 PM, Wayne <moonb...@gmail.com> wrote: 在windows下编译了包含ngx_lua等扩展的nginx,使用luac字节码时,在代码 https://github.com/chaoslawful/lua-nginx-module/blob/master/src/ngx_http_lua_clfactory.c 的350行 :if (ngx_fd_info(fileno(lf->f), &fi) == NGX_FILE_ERROR) 条件成立,进入了错误处理。在linux下面没有问题。 查找了下出错的原因:fileno函数在linux和windows下都返回int类型; ngx_fd_info在unix\ngx_files.h下定义为#define ngx_fd_info(fd, sb) fstat(fd, sb),第一个参数为int类型; ngx_fd_info在win32\ngx_files.h下定义为#define ngx_fd_info(fd, fi) GetFileInformationByHandle(fd, fi)。 而GetFileInformationByHandle函数的第一个参数类型不是int,而是HANDLE 修改这个if判断,进行类型转换:if (ngx_fd_info((HANDLE)_get_osfhandle(fileno(lf->f)), &fi) == NGX_FILE_ERROR) 。重新编译,字节码的功能在windows就能用了。 但是,在linux下面就有问题了。。。如果要实现跨平台,代码应该怎么写比较好呢?
在windows下编译了包含ngx_lua等扩展的nginx,使用luac字节码时,在代码 https://github.com/chaoslawful/lua-nginx-module/blob/master/src/ngx_http_lua_clfactory.c 的350行 :if (ngx_fd_info(fileno(lf->f), &fi) == NGX_FILE_ERROR) 条件成立,进入了错误处理。在linux下面没有问题。 查找了下出错的原因:fileno函数在linux和windows下都返回int类型; ngx_fd_info在unix\ngx_files.h下定义为#define ngx_fd_info(fd, sb) fstat(fd, sb),第一个参数为int类型; ngx_fd_info在win32\ngx_files.h下定义为#define ngx_fd_info(fd, fi) GetFileInformationByHandle(fd, fi)。 而GetFileInformationByHandle函数的第一个参数类型不是int,而是HANDLE 修改这个if判断,进行类型转换:if (ngx_fd_info((HANDLE)_get_osfhandle(fileno(lf->f)), &fi) == NGX_FILE_ERROR) 。重新编译,字节码的功能在windows就能用了。 但是,在linux下面就有问题了。。。如果要实现跨平台,代码应该怎么写比较好呢?
Hello! 2012/10/8 Wayne <moonb...@gmail.com>: > 如果要加入openresty的功能,就要修改一些第三方模块的代码才能在windows下面编译 > 欢迎公开对第三方模块修改的补丁 :) 我一直想为 openresty 提供 Win32 版本的二进制安装包 :) Best regards, -agentzh
Hello! 2012/10/11 Wayne: > 我先把windows下面编译好的openresty放到git上面,有编译步骤,也有直接可以用的二进制包:https://github.com/moonbingbing/openresty_windows/tree/master/release > 后面我整理下修改过的代码,给模块提交补丁 > 赞啊!期待! 多谢贡献! Best regards, -agentzh