Создать окно в программе на Си с Curses - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать коробку с игрой внутри коробки, но сейчас я использую текст 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 голосов
/ 05 декабря 2018

Необходимо передать флаг компоновщика компилятору, чтобы библиотека 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
...