Termux环境下调用getch()触发Segmentation fault问题求助
解决Termux中ncurses调用getch()触发Segmentation Fault的问题
我之前在Termux折腾ncurses的时候也踩过这个getch()段错误的坑,给你几个亲测有效的解决办法:
1. 调整编译命令的链接顺序
你当前的编译命令g++ -lncurses prog.cpp有个小问题:GCC/G++的链接器是从左到右处理文件和库的,如果把库放在源文件前面,链接器可能无法正确关联代码里用到的ncurses符号,导致运行时找不到函数实现触发段错误。
改成下面的命令试试:
g++ prog.cpp -lncurses
这个调整大概率能直接解决你的问题,我当时就是这么搞定的。
2. 完善ncurses的初始化流程
Termux的终端环境和常规Linux桌面有点不一样,建议在代码里加上初始化检查和必要的终端模式设置,避免交互逻辑异常:
#include <ncurses.h> #include <stdlib.h> int main() { // 检查ncurses初始化是否成功 if (initscr() == NULL) { fprintf(stderr, "ncurses初始化失败!\n"); exit(EXIT_FAILURE); } cbreak(); // 禁用行缓冲,让输入字符直接被getch()捕获 noecho(); // 输入时不回显字符,避免终端干扰 refresh(); // 强制刷新屏幕,同步终端状态 getch(); endwin(); return 0; }
即使加过refresh(),配合cbreak()和noecho()能让终端的输入模式更适配ncurses的需求。
3. 重装ncurses依赖(兜底方案)
如果上面的方法都没用,可能是ncurses的包文件损坏了,试试更新Termux并重装ncurses-dev:
pkg update && pkg upgrade -y pkg reinstall ncurses-dev
更新系统包能修复一些隐藏的依赖冲突,重装则可以确保ncurses的库文件是完整的。
内容的提问来源于stack exchange,提问作者Zeus213
相关产品推荐
相关产品推荐

