Undefined reference to <nom-fonction>

Fermé
Sya - 28 nov. 2011 à 12:38
 Sya - 7 déc. 2011 à 15:50
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!

24 réponses

mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
28 nov. 2011 à 19:44
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
0
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
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
Modifié par mamiemando le 29/11/2011 à 10:33
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
0
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
29 nov. 2011 à 20:49
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
0
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
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
30 nov. 2011 à 10:24
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
0
ça n'a pas marché! même en laissant libtk que dans /usr/lib !!
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
30 nov. 2011 à 20:07
Peux-tu me donner le lien vers les sources que tu cherches à compiler (il y a plusieurs trucs qui s'appellent openrobot) ?
0
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!
0
Bogomips Messages postés 123 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 18 mars 2015 16
Modifié par Bogomips le 4/12/2011 à 11:10
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".
0
Non, ça ne marche toujours pas!
0
Bogomips Messages postés 123 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 18 mars 2015 16
4 déc. 2011 à 12:22
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.
0
Bogomips Messages postés 123 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 18 mars 2015 16
Modifié par Bogomips le 4/12/2011 à 12:42
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" 
0
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?
0
Bogomips Messages postés 123 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 18 mars 2015 16
Modifié par Bogomips le 6/12/2011 à 11:09
"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.
0
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é)
0
Bogomips Messages postés 123 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 18 mars 2015 16
6 déc. 2011 à 11:34
Ok.
Ensuite, as-tu reconfiguré et recompilé "eltclsh" ?
0
Bogomips Messages postés 123 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 18 mars 2015 16
6 déc. 2011 à 11:41
Normalement, dans "eltclsh","configure" vérifie la présence de "libtermcap".
0
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!
0