Undefined reference to <nom-fonction>

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!

24 réponses

  • 1
  • 2
  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  2. Sya
     
    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
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  4. Sya
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  7. Sya
     
    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
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  9. Sya
     
    ça n'a pas marché! même en laissant libtk que dans /usr/lib !!
    0
  10. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Peux-tu me donner le lien vers les sources que tu cherches à compiler (il y a plusieurs trucs qui s'appellent openrobot) ?
    0
  11. Sya
     
    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
  12. Bogomips Messages postés 131 Statut Membre 16
     
    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
  13. Bogomips Messages postés 131 Statut Membre 16
     
    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
  14. Bogomips Messages postés 131 Statut Membre 16
     
    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
  15. Sya
     
    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
  16. Bogomips Messages postés 131 Statut Membre 16
     
    "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
  17. Sya
     
    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
  18. Bogomips Messages postés 131 Statut Membre 16
     
    Ok.
    Ensuite, as-tu reconfiguré et recompilé "eltclsh" ?
    0
  19. Bogomips Messages postés 131 Statut Membre 16
     
    Normalement, dans "eltclsh","configure" vérifie la présence de "libtermcap".
    0
  20. Sya
     
    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
  • 1
  • 2