Undefined reference to `initscr' Ncurses
34,803
Solution 1
You need to change your makefile so that the -lncurses
directive comes after your object code on the gcc command line, i.e. it needs to generate the command:
gcc -W -Wall -Werror -Wextra -I./Includes/. -o Sources/NCurses/ncurses_init.o -c Sources/NCurses/ncurses_init.c -lncurses
This is because object files and libraries are linked in order in a single pass.
Solution 2
In C++ , I fixed it just by linking the ncurses library .
Here is the command :
g++ main.cpp -lncurses
Solution 3
I got flags to correct order by using LDLIBS variable:
ifndef PKG_CONFIG
PKG_CONFIG=pkg-config
endif
CFLAGS+=-std=c99 -pedantic -Wall
LDLIBS=$(shell $(PKG_CONFIG) --libs ncurses)
Related videos on Youtube
Comments
-
BoilingLime over 3 years
I'm trying to compile my project and I use the lib ncurse. And I've got some errors when compiler links files.
Here is my flags line in Makefile:
-W -Wall -Werror -Wextra -lncurses
I've included ncurses.h
Some layouts :
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
And here are my 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
Thanks a lot
-
Some programmer dude about 11 yearspossible duplicate of GCC: Use OpenSSL's SHA256 Functions. And many, many more...
-
MestreLion about 9 yearsAnd you learn the hard way that
-l<lib>
is not a flag, but rather a directive ;)
-
-
Lightness Races in Orbit over 9 yearsNote that this demonstrates showing your "flags in Makefile" was insufficient, since your question actually doesn't exhibit the problem. An expert had to intuit it from experience.
-
Chris over 5 yearsthe -lncurses flag also solved my issue when compiling with gcc.
-
CpILL almost 5 yearshow do you do this with a Makefile?
-
Paul R almost 5 years@CpILL: If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context.