Undefined reference to <nom-fonction>
Sya
-
Sya -
Sya -
Bonjour,
J'ai un problème lors de l'installation d'un package (le make) il me dit:
/usr/local/lib/libcomLib.so: undefined reference to 'posterFind
/usr/local/lib/libcomLib.so: undefined reference to 'posterDelete
et je ne sais pas ou est ce qu'il utilise libcomLib.so, j'ai parcouru le Makefile mais je n'ai rien trouvé!
Quelqu'un peut-il avoir une idée, please?
Merci d'avance!
J'ai un problème lors de l'installation d'un package (le make) il me dit:
/usr/local/lib/libcomLib.so: undefined reference to 'posterFind
/usr/local/lib/libcomLib.so: undefined reference to 'posterDelete
et je ne sais pas ou est ce qu'il utilise libcomLib.so, j'ai parcouru le Makefile mais je n'ai rien trouvé!
Quelqu'un peut-il avoir une idée, please?
Merci d'avance!
24 réponses
- 1
- 2
Suivant
-
Qu'est ce que tu compiles et avec quelle distribution linux ?
En gros ce que tu compiles fait appel à des fonctions (posterFind...) déclarées, mais qui devraient être fournies par des librairies (fichiers .so) qui sont absent de ton système. Du coup la compilation plante.
Dans le Makefile, la référence à libcomLib est faite avec l'option -lcomLib, mais si elle est référencée, c'est qu'elle est utile donc ne modifie pas le makefile !
A priori avant de compiler, tu es sensé lancer ./configure pour vérifier que tout ce qui est nécessaire à la compilation est correctement installé. Concrètement si le ./configure échoue, c'est que tu dois installer d'autres choses au préalable. Si le ./configure passe, mais pas la compilation, c'est qu'il y a une erreur dans les sources que tu compiles (ou dans son Makefile), mais c'est peu probable.
Plus de détails sur la compilation ici :
http://www.mistra.fr/tutoriel-linux-compiler.html
Mais garde à l'esprit que sous linux, c'est ultra exceptionnel qu'on compile quelque chose à la main : on essaye en priorité d'installer la librairie ou le logiciel en question via le gestionnaire de paquets.
Bonne chance -
Bonjour,
Merci d'avoir pris le temps de voir et de répondre à ma question mamiemando.
Je suis sous Ubuntu 11.10 et je compile le package tclserv se trouvant dans robotpkg.
J'ai trouvé la solution à mon problème: Il y avait 2 versions de libtool (j'ai vu dans le build.log que les erreurs venaient après avoir fait appel à libtool) installées (1 ancienne 1.5.3 dans le système et une autre 2.2.6b (la plus à jour) dans le dossier robotpkg) donc ça a créé une confusion d'ou le problème, en fin je crois. Parce que dés que j'ai désinstallé les deux versions et réinstallé la plus à jour dans le système ça a marché (la compilation avait réussie)
Maintenant un autre problème est survenu. Lors de l'installation de eltclsh l'erreur suivante apparait: cheking for tk libraby ....... nor found
alors que les libtcl et libtk sont presents dans le pc (/usr/ local/lib)
le make trouve libtcl le plus normalement possible (checking for tcl library... -L/usr/local/lib -ltcl8.5) mais pas le tk qui est dans le même repertoire. Pourquoi?
Quelqu'un a t-il une idée?
Merci -
Le truc c'est que libtool, libtcl et libtk sont disponibles via les paquets, donc il faut éviter de les compiler à la main (car c'est galère, ce ne sera pas mis à jour etc...).
De manière générale, tu dois en priorité installer ces librairies via les paquets (suffixés "-dev" si c'est pour compiler, et généralement préfixés "lib").
Tu peux retrouver avec apt-cache et apt-file les bons paquets :
http://www.mistra.fr/tutoriel-linux-apt.html#h2-rechercheanbsp-dans-les-paquets
Pour installer apt-file :
sudo apt-get update sudo apt-get upgrade sudo apt-get install apt-file sudo apt-file update
On fait quelques recherches :
apt-cache search libtool | grep libtool apt-file search libtk | grep ".so$" apt-file search libtcl | grep ".so$"
... pour en déduire quoi installer :
sudo apt-get install libtool tcl-dev tk-dev
Bonne chance -
Merci
J'ai essayé de les installer automatiquement mais le problème persiste
( tk library not found alors qu'elle est dans /usr/local/lib )
Que faire? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Normalement elle ne devrait plus être dans /usr/local/lib. Tu es sensé l'avoir déjà dans /usr/lib si tu as correctement installé le paquet.
Lance :
sudo updatedb
Et reporte-moi le résultat de :
locate libtk | grep ".so$"
Bonne chance -
Bonjour,
Le résultat de la commande locate libtk | grep ".so$" est:
/home/sya/Bureau/openrobots/lib/libtk8.5.so
/home/sya/Documents/Doc_/stages/Genom/Packages/tk8.5.10/unix/libtk8.5.so
/home/sya/Documents/Doc_/Stages/Genom/Packages/tk8.5.10/unix/build/libtk8.5.so
/home/sya/Documents/openrobot/lib/libtk8.5.so
/home/sya/Documents/openrobots/lib/libtk8.5.so
/usr/lib/libtk.so
/usr/lib/libtk8.5.so
/usr/lib/libreoffice/basis3.4/program/libtkli.so
/usr/local/lib/libtk8.5.so -
Ben tu vois bien que libtk est encore dans /usr/local/lib alors qu'il devrait être uniquement dans /usr/lib. Je ne pense pas que ce qu'y est dans ~/Documents interfère sauf mais en tout cas :
/home/sya/Documents/openrobot/lib/libtk8.5.so /home/sya/Documents/openrobots/lib/libtk8.5.so
... n'ont pas lieu d'être non plus.
Bonne chance -
-
Peux-tu me donner le lien vers les sources que tu cherches à compiler (il y a plusieurs trucs qui s'appellent openrobot) ?
-
Bonjour,
Je m'excuse pour le retard j'avais un problème de connexion.
Bon. Le package s'appelle eltclsh-1.12.tar.gz, et en essayant de le compiler il vous sortira l'erreur de dépendance (tcl/tk 8.5 non trouvé), enfin c'est ce qui s'est passé dans mon cas! -
Salut
As-tu regardé le fichier "config.log" créé automatiquement pendant
la configuration d'une source ?
Peut-être qu'une nouvelle création de "configure" pourrait corriger ce problème en utilisant "autogen.sh" qui se trouve dans ton archive "eltclsh". -
-
Ok.
As-tu regardé dans "config.log" pour "cheking for tk libraby ....... nor found" ?
Normalement,les détails de cette erreur sont indiqués dans ce fichier. -
J'ai essayé "eltclsh"(avec Slackware) et tk est trouvé sans problème
As-tu essayé:./configure LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"
ou
./configure CFLAGS="-L/usr/local/lib -I/usr/local/include"
-
Bonjour,
J'ai essayé les deux commandes indiquées et ça n'a pas marché!
Alors j'ai parcouru le fichier config.log et voila ce que j'ai trouvé:
"configure: 11505: checking for tk library
configure: 11528: /usr/bin/gcc -o conftest -03 -DNDEBUG -I/usr/local/include -I/usr/local/include conftest.c -L/usr/local/lib -ltk8.5 -R/usr/local/lib -L/usr/local/lib -ltcl8.5 >&5
gcc: error: unrecognized option '-R' "
donc, j'ai ouvert le fichier configure dans la ligne indiquée et au lieu de :
LIBS="${LIBS} ${TK_LIB_SPEC} ${TCL_LIB_SPEC}" j'ai mis
LIBS="${LIBS} ${TK_LIB_SPEC} " et ça a marché, eltclsh s'est installé.
Mais (il y a apparemment toujours un mais) lorsque je lance eltclsh il se lance oui mais avec une erreur:
$eltclsh
Cannot read termcap database;
using dumb terminal settings.
eltclsh1.12 - Copyright (C) 2001-2011 LAAS-CNRS
eltclsh >
Voila! quelqu'un a t-il une idée? -
"curses/termcap" est peut-être manquant. Il faut regarder du côté de ncurses avec ncurses-base,ncurses-bin,ncurses-term,libncurses5 ou libncurses5-dev.
-
J'ai essayé de les installer, mais ils sont déjà presents dans mon pc avec une version la plus à jour (sauf pour ncurses-term qui n'y était pas, je l'ai installé mais rien n'a changé)
-
Ok.
Ensuite, as-tu reconfiguré et recompilé "eltclsh" ? -
Normalement, dans "eltclsh","configure" vérifie la présence de "libtermcap".
-
Bon. Je n'ai trouvé qu'une seule occurrence de termcap et pas de libtermcap.
for ac_lib in '' termcap ncurses; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_tputs=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_tputs+set}" = set; then : break fi done
J'ai réecrit toute la boucle contenant termcap, je ne sais pas si elle y était avant d'installer ncurses-term parce que le problème persiste!
- 1
- 2
Suivant