#1 Le 15/11/2018, à 21:05
- DonutMan75
[Resolu] [C] Installation manuelle d'une bibliothèque
Bonsoir à tous,
voilà, afin de bien comprendre comment fonctionnait l'édition de liens lors de la compilation j'ai voulu télécharger et installer une bibliothèque "à la main".
J'ai récuperé ncurses sur le site officiel.
J'ai dézippé le fichier d'archive, puis classiquement :
$ ./configure
[...]
** Configuration summary for NCURSES 6.1 20180127:
extended funcs: yes
xterm terminfo: xterm-new
bin directory: /usr/bin
lib directory: /usr/lib
include directory: /usr/include
man directory: /usr/share/man
terminfo directory: /usr/share/terminfo
$ ./make
Pas de message d'erreur particulier pour le make, tout se déroule bien.
Je ne fais pas de make install car je veux garder les bibliothèques en local dans mon répertoire de travail.
Voici mon code minimal pour utiliser ncurses (trouvé sur le HOWTO de tldp) :
- Code original
#include <ncurses.h>
int main()
{
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
- Code modifié pour prendre en compte la bibliothèque locale
#include "/home/donut/test_ncurses/lib/ncurses-6.1/include/curses.h"
int main()
{
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
J'avais vérifié au passage que le ncurses.h "officiel" est bien un lien vers curses.h :
$ make -n install | grep "ncurses.h"
(cd /usr/include && rm -f ncurses.h && ln -s -f curses.h ncurses.h)
Je compile de cette façon :
$ gcc test01.c -o test01 -I "/home/donut/test_ncurses/lib/ncurses-6.1/lib/ncurses-6.1/include/" -L "/home/donut/test_ncurses/lib/ncurses-6.1/lib/ncurses-6.1/lib/" -lncurses
Tout se passe bien, aucun message d'erreur !
Or à l'exécution :
$ ./test01
Error opening terminal: xterm-256color.
$ printenv TERM
xterm-256color
Comme suggéré sur le net, j'ai tenté d'exécuter avec d'autre définition de cette variable d'environnement mais sans succès.... Je remarque le terminfo directory défini lors du ./configure est vide, mais je ne m'y connais pas assez pour savoir si c'est un problème ou pas :
$ ls /usr/share/terminfo
$
Et là, je bloque un peu... Je suis sous Ubuntu 18.04 LTS et j'aimerais bien trouver la solution "à la main" histoire de bien comprendre ce qu'il se passe....
Avez-vous des idées ? Des suggestions ?
Merci d'avance et bonne soirée à tous
Donut
Dernière modification par DonutMan75 (Le 16/11/2018, à 06:53)
Hors ligne
#2 Le 15/11/2018, à 21:08
- DonutMan75
Re : [Resolu] [C] Installation manuelle d'une bibliothèque
Je rajoute également cette information, si ça peut s'avérer utile :
$ find /lib/terminfo/ -name "xterm*"
/lib/terminfo/x/xterm-xfree86
/lib/terminfo/x/xterm-mono
/lib/terminfo/x/xterm-r5
/lib/terminfo/x/xterm-debian
/lib/terminfo/x/xterm-color
/lib/terminfo/x/xterm-r6
/lib/terminfo/x/xterm-vt220
/lib/terminfo/x/xterm-256color
/lib/terminfo/x/xterm
Hors ligne
#3 Le 16/11/2018, à 06:53
- DonutMan75
Re : [Resolu] [C] Installation manuelle d'une bibliothèque
Hello,
bon après une soirée à trifouiller un peu dans tout les sens, j'ai réussi à faire fonctionner mon code !
Tout d'abord, et afin d'avoir une installation locale "propre" j'ai fait un make install avec l'option DESTDIR :
$ make install DESTDIR="/home/donut/install_locale/"
$ gcc test01.c -o test01 -D_GNU_SOURCE -D_DEFAULT_SOURCE -I "/home/donut/install_locale/usr/include/" -L "/home/donut/install_locale/usr/lib/" -lncurses
En farfouillant un peu sur mon disque je suis (par hasard !) tombé sur ça :
$ cat /etc/terminfo/README
This directory is for system-local terminfo descriptions. By default,
ncurses will search ${HOME}/.terminfo first, then /etc/terminfo (this
directory), then /lib/terminfo, and last not least /usr/share/terminfo.
Du coup, je me suis dit qu'il fallait que je mette les terminfo descriptions fraîchement crées par mon make dans un répertoire $HOME/.terminfo que j'ai crée pour l'occasion.
Bon, je ne comprends pas du tout pourquoi il n'a pas accroché sur les terminfo de /lib/terminfo/ mais ça a l'air de marcher...
Si quelqu'un a un éclairage particulier à apporter à tout ça, ou des suggestions de "bonne pratique" pour installer une bibliothèque à la main (là j'ai quand même l'impression d'avoir un peu bidouiller pour que ça fonctionne), je suis preneur !!
En attendant, je passe le sujet à résolu.
Bonne journée à tous !
Donut
Hors ligne
#4 Le 16/11/2018, à 06:58
- DonutMan75
Re : [Resolu] [C] Installation manuelle d'une bibliothèque
Je rajoute également que c'est une fois qu'on a compris d'où venait le problème qu'on peut faire des recherches précises sur le net.
Ci-dessous, et pour mémoire, une page de stackoverflow expliquant comment spécifier un répertoire particulier de terminfo. Je testerai ça ce soir
https://stackoverflow.com/questions/715 … -ncurses-f
Donut
Hors ligne