Je souhaite créer une bibliothèque statique implémentant une interface TUI à l'aide de ncurses. Je suis nouveau à ce sujet et l'application de ces réponses ne fonctionne pas pour moi.Création d'une bibliothèque statique incluant ncurses
Je veux créer un lien varViewer.c dans une bibliothèque. J'utilise ce code pour compiler un fichier d'exemple.
src Compiler/example.c et src/spectateur/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
Lier obs/example.o à bin/exemple:
gcc -o bin/example -Isrc/viewer/
obs/example.o obs/viewer/varViewer.o -lncurses
-fsanitize=undefined -fprofile-arcs -ftest-coverage -Winline -O2
bin/exemple fonctionne comme prévu . J'ai essayé de compiler un fichier objet approprié:
src Compiler/spectateur/varViewer.c:
gcc -Wall -Wextra -Wnonnull -Isrc/viewer/
-c src/viewer/varViewer.c -o lib/objects/varViewer.o
-lncurses -fPIC -O2
et le mettre dans la bibliothèque:
ar -cvr lib/libvarViewer.a lib/objects/varViewer.o
lorsque je tente de l'utiliser dans d'autres projets, un notamment à l'aide
-L ..../src/spectateur/lib -lvarViewer
drapeaux, mais toutes les références à des fonctions que j'ai utilisé de la bibliothèque ncurses et string.h ne sont pas définies:
nm /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
Quelle est la bonne façon appeler ar? J'ai déjà essayé de produire une bibliothèque "fine" en utilisant l'option -T.
Merci :-) J'ai essayé de suivre votre conseil et lié à ncurses lib. Malheureusement quand j'essaye de lier contre '/ usr/lib/x86_64-linux-gnu/libncurses.a' en utilisant 'gcc -I ../ viewer/lib garbage.c -L ../viewer/lib/-lvarViewer -l : libncurses.a' Je reçois beaucoup de références indéfinies pendant que 'gcc -I ../ viewer/lib garbage.c -L ../ viewer/lib/-lvarViewer -lncurses' fonctionne. Ai-je raté quelque chose? Selon [cette question] (http://stackoverflow.com/questions/3514852/static-link-ncurses-to-program?rq=1) cela devrait fonctionner. – anpi
Références indéfinies à quels symboles? – Harald
J'essaie de le résumer: Dans les fonctions j'ai écrit des macros comme 'COLS, LINES, stdscr' sont indéfinies. Dans les fonctions de libncurses, certains symboles liés au terminal (tparm, SP, cur_term, ...) sont manquants: exemple: /usr/lib/gcc/x86_64-linux-gnu/5/../../. ./x86_64-linux-gnu/libncurses.a(lib_box.o): Dans la fonction 'wborder ': (.text + 0x1f): référence non définie' acs_map ' – anpi