在FreeBSD 10.3上编译Passenger 5.2(Nginx 1.12.2动态模块)报错求助
解决Passenger 5.2编译时WEXITSTATUS未定义的错误
这个错误的核心原因是WEXITSTATUS宏定义在<sys/wait.h>头文件里,但Passenger 5.2的代码中可能遗漏了对这个头文件的引用,导致编译器找不到它。这里给你几个可行的解决办法:
手动添加缺失的头文件
找到报错的文件src/cxx_supportlib/Hooks.h,在文件最顶部的#include区域添加一行:#include <sys/wait.h>保存后重新执行
rake nginx:as_dynamic_module命令,应该就能正常编译了。检查编译环境的头文件路径
有时候系统的头文件路径可能没有被正确识别,你可以在编译时手动指定包含路径,比如:CFLAGS="-I/usr/include" rake nginx:as_dynamic_module这里的
/usr/include是常见的系统头文件目录,如果你的系统路径不同,需要替换成对应的路径。切换到稳定版本
既然你提到Passenger 5.1.12可以正常编译运行,如果你不想折腾补丁的话,完全可以先降级到这个版本:gem uninstall passenger -v 5.2.x gem install passenger -v 5.1.12或者也可以尝试升级到Passenger 5.2系列的后续小版本(比如5.2.3及以后),官方可能已经修复了这个编译bug。
确认编译工具链版本
旧版本的clang或gcc可能对标准库宏的处理有兼容性问题,检查一下你的编译器版本,必要时更新到较新的稳定版,再重新编译。
内容的提问来源于stack exchange,提问作者devanand
相关产品推荐
相关产品推荐

