在Windows的Cygwin64终端编译ncurses时出现-E: command not found错误求助
在Cygwin64中编译ncurses时解决
-E: command not found错误的方案 问题场景
在Windows系统的Cygwin64终端编译安装ncurses包时,make过程中触发多个-E: command not found错误,已通过在MKlib_gen.sh开头添加sed -x启用调试,错误详情如下:
错误1
+ preprocessor='gcc -DNCURSES_WATTR_MACROS -DNCURSES_INTERNALS -I../include' + AWK=-E + USE=-DHAVE_CONFIG_H ++ echo gcc ++ -E '{ sub(/^[ ]*/,""); sub(/[ ].*$/, ""); print; }' ./base/MKlib_gen.sh: line 87: -E: command not found
错误2
+ sed -n -f sed1_1576.sed + sed -e 's/NCURSES_EXPORT(\(.*\)) \(.*\) (\(.*\))/\1 \2(\3)/' + sed -f sed2_1576.sed + -E -f awk1_1576.awk using=-DHAVE_CONFIG_H ./base/MKlib_gen.sh: line 509: -E: command not found + sed -e 's/ [ ]*$//g' -e 's/^\([a-zA-Z_][a-zA-Z_]*[ *]*\)/\1 gen_/' -e 's/gen_$//' -e 's/ / /g'
错误3
+ gcc -DNCURSES_WATTR_MACROS -DNCURSES_INTERNALS -I../include gen__1576.c + sed -e 's/ / /g' -e 's/^ //' -e s/_Bool/NCURSES_BOOL/g + -E -f awk2_1576.awk ./base/MKlib_gen.sh: line 521: -E: command not found
解决方法
这些错误的核心原因是脚本中AWK变量只设置了-E参数,但没有指定具体的awk程序路径/名称,导致系统直接执行-E这个不存在的命令。
步骤1:确认已安装gawk
Cygwin默认可能没有安装gawk,先通过以下命令检查:
gawk --version
如果提示命令不存在,打开Cygwin的安装程序,在Interpreters分类下找到gawk并安装。
步骤2:修改MKlib_gen.sh脚本中的AWK变量定位
打开base/MKlib_gen.sh,找到设置AWK变量的位置(根据错误日志是在脚本开头附近),将:
AWK=-E
修改为:
AWK="gawk -E"
如果系统中awk已经是gawk的软链接,也可以写成:
AWK="awk -E"
注意必须保留双引号,避免参数被错误拆分。
步骤3:重新执行编译流程
先清理之前的编译残留:
make clean
然后重新配置(确保变量生效,若之前配置无问题可跳过):
./configure
最后执行编译:
make
替代方案:直接通过Cygwin包管理器安装ncurses
如果手动编译麻烦,直接用Cygwin包管理器安装预编译好的版本更高效:
- 打开Cygwin安装程序
- 在
Libs分类下找到libncurses-devel(开发包,包含头文件和库)和libncursesw-devel(宽字符支持版本) - 选中后完成安装即可,无需手动编译
内容的提问来源于stack exchange,提问作者Mohamed Elkharashy
相关产品推荐
相关产品推荐

