Неопределенная ссылка на `К initscr' на ncurses

Я пытаюсь скомпилировать свой проект, и я использую lib ncurse. И у меня есть некоторые ошибки, когда компилятор связывает файлы.

вот моя строка флагов в Makefile:

-W -Wall -Werror -Wextra -lncurses

Я включил ncurses.h

некоторые макеты :

prompt$> dpkg -S curses.h
libslang2-dev:amd64: /usr/include/slcurses.h
libncurses5-dev: /usr/include/ncurses.h
libncurses5-dev: /usr/include/curses.h

prompt$> dpkg -L libncurses5-dev | grep .so
/usr/lib/x86_64-linux-gnu/libncurses.so
/usr/lib/x86_64-linux-gnu/libcurses.so
/usr/lib/x86_64-linux-gnu/libmenu.so
/usr/lib/x86_64-linux-gnu/libform.so
/usr/lib/x86_64-linux-gnu/libpanel.s

и вот мои erros:

gcc -W -Wall -Werror -Wextra -I./Includes/. -lncurses -o Sources/NCurses/ncurses_init.o -c Sources/NCurses/ncurses_init.c
./Sources/NCurses/ncurses_init.o: In function `ncruses_destroy':
ncurses_init.c:(.text+0x5): undefined reference to `endwin'
./Sources/NCurses/ncurses_init.o: In function `ncurses_write_line':
ncurses_init.c:(.text+0xc5): undefined reference to `mvwprintw'
./Sources/NCurses/ncurses_init.o: In function `ncurses_init':
ncurses_init.c:(.text+0xee): undefined reference to `initscr'
collect2: error: ld returned 1 exit status

Спасибо большое

4 ответов


вам нужно изменить свой makefile так, чтобы


Я получил флаги для исправления порядка с помощью переменной LDLIBS:

ifndef PKG_CONFIG
PKG_CONFIG=pkg-config
endif

CFLAGS+=-std=c99 -pedantic -Wall
LDLIBS=$(shell $(PKG_CONFIG) --libs ncurses)

В C++ я исправил это, просто связав библиотеку ncurses .

вот команды :

g++ main.cpp -lncurses

man gcc | grep -A10 "\-l library"

-л библиотека

Поиск библиотеки с именем library при связывании. (Вторая альтернатива с библиотекой в качестве отдельного аргумента предназначена только для POSIX соблюдение и не рекомендуется.)

это имеет значение, где в команде вы пишете эту опцию; компоновщик ищет и обрабатывает библиотеки и объектные файлы в порядке они указываются. Итак, фу.о-ЛЗ-бар.о поисков библиотека z после файла foo.o но до бар.o. Если бар.o относится к функциям в z, эти функции не могут быть загружены.