You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下通过makefile编译curses项目提示__imp_stdscr未定义错误

问题原因分析
  • 你使用的Msys2 Mingw64环境下,ncurses头文件默认会优先使用动态链接的符号导入规则,没有定义NCURSES_STATIC宏的情况下,所有ncurses导出符号都会加__imp_前缀,和静态ncurses库导出的符号不匹配,就会出现本次遇到的链接错误。
  • 部分Mingw环境默认只提供宽字符版本的ncurses库,库名为libncursesw.a,用原Makefile里的-lncurses无法正确链接到库文件。
解决方案步骤
  1. 首先安装必要的依赖包
    打开Mingw64终端,执行以下命令安装ncurses开发包:
pacman -S mingw-w64-x86_64-ncurses
  1. 清理之前的编译缓存
    执行make clean删除之前生成的.o文件和可执行文件,避免旧缓存影响编译结果。
  2. 修改Makefile配置
    修改后的Makefile内容如下:
CFLAG = -Wall -pedantic -Wno-comment -O3 -std=c89 -DNCURSES_STATIC
  
all: pong pong_log

game.o: game.h game.c
    gcc $(CFLAG) -c game.c

display.o: display.h display.c
    gcc $(CFLAG) -c display.c

pong: game.h display.h game.o display.o main.c
    gcc $(CFLAG) display.o game.o main.c -o pong -lncursesw

pong_log: game.h display.h game.o display.o main.c
    gcc $(CFLAG) -D REG display.o game.o main.c -o pong_log -lncursesw 

clean:
    rm -rf *.o pong pong_log

修改点说明:

  • CFLAG新增-DNCURSES_STATIC宏定义,强制使用静态ncurses库的符号规则
  • 链接参数将-lncurses替换为-lncursesw,适配Mingw下的宽字符ncurses库
  1. 重新执行make命令编译即可。

如果修改后还有链接错误,可以尝试在链接参数末尾额外加上-ltinfo,部分环境下ncurses依赖tinfo库。

内容的提问来源于stack exchange,提问作者pietro ventrucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:48:01