Xubuntu 22.04下ncurses已安装但编译代码失败求助
嘿,我一眼就看出问题所在啦——你编译命令里的库链接选项顺序错了!
GCC处理输入文件和链接选项是有严格顺序的:它会按你写的顺序依次处理内容,先编译源文件生成目标文件,再从后面的库文件里找目标文件需要的符号。你之前用的gcc -lncurses main.c,会先处理-lncurses库,这时候还没编译main.c,库里面的符号还没被用到,gcc就会跳过它们;等处理main.c的时候,需要的initscr、printw这些符号找不到对应的库,自然就报未定义引用的错误了。
解决办法:
修正编译命令顺序:把源文件放在链接选项前面,改成这样:
gcc main.c -lncurses这样gcc先编译
main.c,明确知道需要哪些ncurses的符号,再去-lncurses库里面查找匹配项,就能正常完成链接了。备选方案:用pkg-config自动生成编译选项
如果你怕记混顺序,可以用pkg-config来帮你自动获取正确的编译和链接参数,命令如下:gcc main.c $(pkg-config --libs --cflags ncurses)pkg-config会自动输出ncurses需要的头文件路径和链接库选项,而且顺序绝对正确,适合懒人或者处理复杂库依赖的场景。试试宽字符版本的库:
你已经安装了libncursesw5-dev(支持宽字符的ncurses版本),如果上面的命令还是有问题,可以试试链接宽字符版本的库:gcc main.c -lncursesw你的代码里用的
<ncurses.h>头文件和ncursesw是兼容的,所以不需要修改代码,只需要换链接库即可。
另外,你安装的那些库包是完全没问题的,libncurses5-dev和libncursesw5-dev已经涵盖了开发ncurses程序所需的全部文件,不用再额外安装其他包啦。
你的代码本身完全没问题,就是踩了编译命令顺序的小坑,改完应该就能正常运行了!
备注:内容来源于stack exchange,提问作者Lincoln

