23

プロジェクトをコンパイルしようとしていて、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

どうもありがとう

4

4 に答える 4

40

makefile を変更して、gcc コマンド ラインでオブジェクト コードの-lncursesに​​ディレクティブが来るようにする必要があります。つまり、コマンドを生成する必要があります。

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

これは、オブジェクト ファイルとライブラリが 1 つのパスで順番にリンクされるためです。

于 2013-04-24T12:31:38.173 に答える
2

LDLIBS 変数を使用して、順序を修正するためのフラグを取得しました。

ifndef PKG_CONFIG
PKG_CONFIG=pkg-config
endif

CFLAGS+=-std=c99 -pedantic -Wall
LDLIBS=$(shell $(PKG_CONFIG) --libs ncurses)
于 2014-09-05T15:17:33.087 に答える