Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/11/2018, à 22: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... sad 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 smile

Donut

Dernière modification par DonutMan75 (Le 16/11/2018, à 07:53)

Hors ligne

#2 Le 15/11/2018, à 22: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, à 07: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, à 07: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 smile

https://stackoverflow.com/questions/715 … -ncurses-f

Donut

Hors ligne