Undefined reference to 'Initscr' Ncurses
Próbuję skompilować mój projekt i używam lib ncurse. I mam kilka błędów, gdy kompilator łączy pliki.
Oto moja linia flags w Makefile:
-W -Wall -Werror -Wextra -lncurses
Włączyłem ncurses.h
Niektóre layouty:
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
A oto moje erro:
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
Wielkie dzięki
4 answers
Musisz zmienić plik makefile tak, aby dyrektywa -lncurses
pojawiła się Po Twoim kodzie obiektowym w linii poleceń gcc, tzn. musi wygenerować polecenie:
gcc -W -Wall -Werror -Wextra -I./Includes/. -o Sources/NCurses/ncurses_init.o -c Sources/NCurses/ncurses_init.c -lncurses
Dzieje się tak, ponieważ pliki obiektowe i biblioteki są połączone w kolejności w jednym przejściu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 12:31:38
W C++ , naprawiłem to poprzez połączenie biblioteki ncurses .
Oto polecenie:
g++ main.cpp -lncurses
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-09 23:44:04
Mam flagi do poprawienia kolejności używając zmiennej LDLIBS:
ifndef PKG_CONFIG
PKG_CONFIG=pkg-config
endif
CFLAGS+=-std=c99 -pedantic -Wall
LDLIBS=$(shell $(PKG_CONFIG) --libs ncurses)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 15:17:33
man gcc | grep -A10 "\-l library"
- biblioteka l
Przeszukaj bibliotekę o nazwie library podczas łączenia. (Druga alternatywa z biblioteką jako osobnym argumentem jest tylko dla POSIX zgodność i nie jest zalecane.)
Robi różnicę, gdzie w poleceniu zapisujesz tę opcję; linker wyszukuje i przetwarza biblioteki i pliki obiektowe w określonej kolejności. Tak więc, foo.Bar o-lz.o szukanie biblioteka z PO pliku foo.o ale przed barem.o. Jeśli bar.o odnosi się do funkcji w z, funkcje te mogą nie być ładowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 08:58:10