未定义参考`initscr的”的Ncurses(Undefined reference to `in

2019-09-01 00:58发布

我试图编译我的项目,我用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

这里是我的误差修改:

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

非常感谢

Answer 1:

你需要改变你的Makefile,以便-lncurses指令而来的gcc命令行上的目标代码 ,即它需要生成命令:

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

这是因为目标文件和库,以便链接在一个单一的通行证。



Answer 2:

我旗利用LDLIBS变量正确的顺序:

ifndef PKG_CONFIG
PKG_CONFIG=pkg-config
endif

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


Answer 3:

在C ++中,我只是通过链接ncurses库固定它。

下面是一个命令:

g++ main.cpp -lncurses


Answer 4:

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

-l库

链接时搜索名为library的库。 (与库作为单独的参数的第二替代方案是只对POSIX标准,因此不推荐)。

这使得其中的命令写这个选项的差异; 链接器的搜索和处理库和目标文件在他们指定的顺序。 因此,foo.o -lz文件bar.o搜索文件foo.o的之后,但之前bar.o.库z, 如果bar.o指功能Z,那些功能可以不被加载。



文章来源: Undefined reference to `initscr' Ncurses