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)
Share:
34,803

Related videos on Youtube

BoilingLime
Author by

BoilingLime

SOreadytohelp

Updated on September 24, 2020

Comments

  • BoilingLime
    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
      Some programmer dude about 11 years
      possible duplicate of GCC: Use OpenSSL's SHA256 Functions. And many, many more...
    • MestreLion
      MestreLion about 9 years
      And you learn the hard way that -l<lib> is not a flag, but rather a directive ;)
  • Lightness Races in Orbit
    Lightness Races in Orbit over 9 years
    Note 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
    Chris over 5 years
    the -lncurses flag also solved my issue when compiling with gcc.
  • CpILL
    CpILL almost 5 years
    how do you do this with a Makefile?
  • Paul R
    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.