Undefined reference to `initscr' Ncurses

j'essaie de compiler mon projet et j'utilise la lib ncurse. Et j'ai quelques erreurs quand le compilateur lie des fichiers.

voici ma ligne de drapeaux dans Makefile:

-W -Wall -Werror -Wextra -lncurses

j'ai inclus les cours.h

Certaines mises en page :

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

Et voici mes erreurs :

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

Merci beaucoup

15
demandé sur BoilingLime 2013-04-24 16:29:10

4 réponses

vous devez changer votre makefile pour que le -lncurses directive après votre code objet sur la ligne de commande gcc, c'est-à-dire qu'il doit générer la commande:

gcc -W -Wall -Werror -Wextra -I./Includes/. -o Sources/NCurses/ncurses_init.o -c Sources/NCurses/ncurses_init.c -lncurses

ceci est dû au fait que les fichiers objets et les bibliothèques sont reliés par ordre en un seul passage.

26
répondu Paul R 2013-04-24 12:31:38

j'ai des options pour corriger l'ordre en utilisant la variable LDLIBS:

ifndef PKG_CONFIG
PKG_CONFIG=pkg-config
endif

CFLAGS+=-std=c99 -pedantic -Wall
LDLIBS=$(shell $(PKG_CONFIG) --libs ncurses)
1
répondu Ari Malinen 2014-09-05 15:17:33

En C++ , j'ai corrigé simplement en reliant la bibliothèque ncurses .

Voici la commande :

g++ main.cpp -lncurses
1
répondu Natesh bhat 2018-01-09 23:44:04
man gcc | grep -A10 "\-l library"

-l de la bibliothèque

rechercher la bibliothèque nommée bibliothèque lors du lien. (La seconde alternative avec la bibliothèque comme argument séparé est seulement pour POSIX conformité et n'est pas recommandé.)

Cela fait une différence où dans la commande vous écrivez cette option; le linker recherche et traite les bibliothèques et les fichiers d'objets dans l'ordre où elles sont indiquées. Ainsi, foo.o-lz bar.o recherches bibliothèque z après file foo.o mais avant bar.o. Si la barre.o se réfère aux fonctions en z, ces fonctions ne peuvent pas être chargées.

0
répondu mihai 2017-06-19 08:58:10