Я хочу создать статическую библиотеку, реализующую интерфейс TUI с использованием ncurses. Я новичок в этой теме, и применение этих ответов не сработало для меня.Создать статическую библиотеку, включая ncurses
Я хочу связать varViewer.c в библиотеке. Я использую этот код для компиляции файла примера.
Компиляция SRC/example.c и Src/зрителя/varViewer.c:
gcc -Wall -Wextra -Wnonnull -Isrc/viewer/
-c src/example.c -o obs/example.o -lncurses
-fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2
gcc -Wall -Wextra -Wnonnull -Isrc/viewer/
-c src/viewer/varViewer.c -o obs/viewer/varViewer.o -lncurses
-fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2
Связывание набл/example.o бен/например:
gcc -o bin/example -Isrc/viewer/
obs/example.o obs/viewer/varViewer.o -lncurses
-fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2
бен/пример работает, как ожидалось , Я попытался составить подходящий файл объекта:
Компиляция SRC/зритель/varViewer.c:
gcc -Wall -Wextra -Wnonnull -Isrc/viewer/
-c src/viewer/varViewer.c -o lib/objects/varViewer.o
-lncurses -fPIC -O2
и поместить его в библиотеку:
ar -cvr lib/libvarViewer.a lib/objects/varViewer.o
, когда я пытаюсь использовать его в других проекты, включить его с помощью
-L ..../SRC/зритель/Библиотека -lvarViewer
флаги, но все ссылки на функции, которые я использовал из библиотеки Ncurses и string.h не определены:
нм /lib/libvarViewer.a
....
U __snprintf_chk
U __stack_chk_fail
U start_color
U stdscr
U strchr
U strlen
U strncmp
U strncpy
U strnlen
U waddnstr
U wborder
U wclear
U wcolor_set
U wgetnstr
U winsdelln
U winsnstr
U wmove
U wrefresh
Что такое правильный путь вызвать ar? Я уже пытался создать «тонкую» библиотеку с использованием опции -T.
Спасибо :-) Я попытался следовать вашему совету и связался с ncurses lib. К сожалению, когда я пытаюсь ссылаться на '/ usr/lib/x86_64-linux-gnu/libncurses.a', используя' gcc -I ../ viewer/lib garbage.c -L ../ viewer/lib/-lvarViewer -l : libncurses.a' Я получаю много неопределенных ссылок, а 'gcc -I ../ viewer/lib garbage.c -L ../ viewer/lib/-lvarViewer -lncurses' работает. Я что-то упустил? Согласно [этому вопросу] (http://stackoverflow.com/questions/3514852/statically-link-ncurses-to-program?rq=1) это должно работать. – anpi
Неопределенные ссылки на какие символы? – Harald
Я пытаюсь его суммировать: В функциях, которые я написал макросы, такие как 'COLS, LINES, stdscr', не определены. В функциях из libncurses отсутствуют некоторые связанные с терминалом символы (tparm, SP, cur_term, ...): пример: /usr/lib/gcc/x86_64-linux-gnu/5/../../. ./x86_64-linux-gnu/libncurses.a(lib_box.o): В функции 'wborder ': (.text + 0x1f): неопределенная ссылка' acs_map ' – anpi