Pages : 1
#1 Le 22/12/2013, à 15:18
- 0x010C
Compilation avec Ncurses
Bonjour à tous,
Je suis face à un problème. Pour mes cours, je dois réaliser un projet en C, et je souhaite gérer l'affichage en console avec la bibliothèque ncurses. Le problème c'est que je dois faire une démo, dont compilation, sur les ordis de l'école, qui ne possèdent pas le paquet libncurses5-dev.
Est-il possible de récupérer la bibliothèque d'une façon ou d'une autre et le "ranger" avec le reste de mon projet ?
Je vous remercie,
0x010C
Hors ligne
#2 Le 22/12/2013, à 16:06
- tiramiseb
Re : Compilation avec Ncurses
Tu peux embarquer la bibliothèque directement dans le code de ton projet, oui, et utiliser celle-là (qui sera alors compilée en même temps que ton projet) plutôt que la version proposée par la distribution.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#3 Le 22/12/2013, à 16:54
- 0x010C
Re : Compilation avec Ncurses
Tout d'abord, merci de ta réponse !
Mais que faut-il embarquer exactement ? Où télécharger ces fichiers ?
Hors ligne
#4 Le 22/12/2013, à 19:24
- claudius01
Re : Compilation avec Ncurses
Bonsoir,
Mais que faut-il embarquer exactement ? Où télécharger ces fichiers ?
Les librairies statiques (libncurses*.a) , seules embarquables du paquet libncurses5-dev seront intallées à un endroit que tu pourras trouver par la commande find qui indique chez moi sur un très vieil Ubuntu 32 bits ;-)
$ find /usr/lib -name "*curses*"
/usr/lib/libncurses.so
/usr/lib/libncurses++w.a
/usr/lib/libncurses++.a
/usr/lib/libcurses.so
/usr/lib/libcurses.a
/usr/lib/libncursesw.so
/usr/lib/libncurses.a
/usr/lib/libncurses.so.5
/usr/lib/libncursesw.a
NB: Attention certaines sorties indiquent un lien sur le fichier librairie pointé.
Cordialement, A+
--
Claudius
Dernière modification par claudius01 (Le 22/12/2013, à 20:01)
Hors ligne
#5 Le 24/12/2013, à 00:59
- 0x010C
Re : Compilation avec Ncurses
Merci claudius01. Dernières questions :
Dois-je prendre tous les .a, ou seuls certains suffisent ?
Et ensuite, comment compiler ? Ajouter le flag -lncurses ? Changer mes includes ? Autre ? (j'utilise gcc en ligne de commande comme compilateur)
Hors ligne
#6 Le 24/12/2013, à 12:56
- telliam
Re : Compilation avec Ncurses
salut, il faut que tu linkes en static :
gcc monfichier.c libmylib.a
au lieu de
gcc monfichier.c -lmylib
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#7 Le 24/12/2013, à 14:51
- 0x010C
Re : Compilation avec Ncurses
Merci je vais essayer, je vous tiens au courant :-)
Hors ligne
#8 Le 25/12/2013, à 20:10
- 0x010C
Re : Compilation avec Ncurses
Au final, j'ai eu pas mal d'erreurs en linkant en statique la librairie ncurses.a, du coup je compile en ajoutant
-l libncurses.so
avec la bibliothèque dynamique dans le dossier de mon projet.
(En faisant "export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:." pour pouvoir executer le programme ;-) )
Encore merci de votre aide,
0x010C
Hors ligne
#9 Le 26/12/2013, à 18:54
- claudius01
Re : Compilation avec Ncurses
Bonsoir,
Au final, j'ai eu pas mal d'erreurs en linkant en statique la librairie ncurses.a, du coup je compile en ajoutant
-l libncurses.so
Ben oui, mais c'est en total contradiction avec "Le problème c'est que je dois faire une démo, dont compilation, sur les ordis de l'école, qui ne possèdent pas le paquet libncurses5-dev"
Quelles-sont ces erreurs insurmontables ?
Cordialement, A+
--
Claudius
Hors ligne
#10 Le 26/12/2013, à 21:20
- Destroyers
Re : Compilation avec Ncurses
Réponse :
avec la bibliothèque dynamique dans le dossier de mon projet.
c'est également comme ça que je porte mes projets sur d'autres ordinateurs, avec un petit .sh
sudo cp lib/mylib.so /usr/lib
EDIT de plus il utilise la variable LD_LIBRARY_PATH donc tout ses problèmes sont réglés.
Dernière modification par Destroyers (Le 26/12/2013, à 21:23)
Hors ligne
#11 Le 27/12/2013, à 14:17
- claudius01
Re : Compilation avec Ncurses
Bonjour,
... c'est également comme ça que je porte mes projets sur d'autres ordinateurs, avec un petit .sh
sudo cp lib/mylib.so /usr/lib... de plus il utilise la variable LD_LIBRARY_PATH donc tout ses problèmes sont réglés.
Certes, mais c'est une très mauvaise habitude et un très mauvais exemple à donner ;-)
Faudra pas que tu t'étonnes que cela tombe en marche et bonjour la cohérence dudit ordinateur vis à vis des libxxx.so qui tirent d'autres libyyy.so comme justement cette libncurses.so qui ne t'appartient pas:
$ ldd /usr/lib/libncurses.so
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e38000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e34000)
/lib/ld-linux.so.2 (0x80000000)
A la limite, j'accepterais pour minimiser les dégats:
sudo cp lib/mylib.so /usr/mylib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/mylib
qui indique gentillement au système de prendre "mes librairies si tu ne les trouves pas aux endroits standards"
NB: On se demande pourquoi les librairies statiques ont été inventées dès l'origine d'Unix de Linux au siècle dernier et toujours proposées jusqu'à maintenant...
Cordialement, Bonnes fêtes et A+
--
Claudius
Hors ligne
Pages : 1