在C程序中使用Curses创建一个框

时间:2018-12-05 03:52:12

标签: c ncurses curses

我正在尝试创建一个盒子,盒子内有一个游戏,但是现在我正在使用文本this is my box进行测试。我第一次对诅咒感到困惑,但是我想在业余时间自己学习。我之前在其他C程序上没有任何问题,但是这次,在Repl.it上编译后,我一直收到消息错误,但是#include <windows.h>在系统文件或Linux系统中也不存在。

#include <stdio.h>
#include <ncurses.h>
#include <stdlib.h>

int main(int argc, char ** argv){

  initscr();
  int height, width, start_y, start_x;
  height = 10;
  width = 20;
  start_y = start_x = 10;

  WINDOW * win = newwin(height, width, start_y, start_x);
  refresh();

  box(win, 0, 0);
  mvwprintw(win, 1, 1, "this is my box");
  wrefresh(win);

  int c = getch();

  endwin();



return 0;
}

错误消息:

gcc version 4.6.3
exit status 1
/tmp/cc3HSdBS.o: In function `main':
main.c:(.text+0x10): undefined reference to `initscr'
main.c:(.text+0x3e): undefined reference to `newwin'
main.c:(.text+0x49): undefined reference to `stdscr'
main.c:(.text+0x51): undefined reference to `wrefresh'
main.c:(.text+0x82): undefined reference to `wborder'
main.c:(.text+0xa6): undefined reference to `mvwprintw'
main.c:(.text+0xb2): undefined reference to `wrefresh'
main.c:(.text+0xb9): undefined reference to `stdscr'
main.c:(.text+0xc1): undefined reference to `wgetch'
main.c:(.text+0xc9): undefined reference to `endwin'
collect2: error: ld returned 1 exit status

编译:

g++ -Incurses project.c -o project

1 个答案:

答案 0 :(得分:2)

您必须将链接器标志传递给编译器,以便在编译时链接ncurses库。此标志为-lncurses

根据OP的评论,编译器调用为:

g++ -Incurses project.c -o project

最初的l(ell)在链接器标志中被错误地变成了I(很容易犯)。此外,链接器标志在此调用中位于错误的位置。链接器标志必须跟随其源文件。更好的调用是:

g++ -o project project.c -lncurses

我不确定为什么OP在这里使用g++作为C代码;最好直接使用gcc。我还建议始终启用一些警告:

gcc -std=c11 -Wall -Wextra -Wpedantic -o project project.c -lncurses