IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[HP-UX] [C linking] Unresolved symbol pour la 7e librairie et les suivantes


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [HP-UX] [C linking] Unresolved symbol pour la 7e librairie et les suivantes
    Bonjour,

    Tout d'abord je m'excuse si ce post n'est pas dans le bon sous-forum, j'ai hésité entre toutes les options qui s'offraient à moi...

    Voici mon problème : j'obtiens systématiquement plusieurs erreurs Unresolved symbol : blah bah à l'exécution de mon projet.
    Je ne suis pas un expert dans le domaine donc c'est peut-être quelque chose de simple mais je n'arrive pas à trouver, c'est pourquoi je fais appel à la bonté de la communauté (que je remercie par ailleurs).

    Le projet en question est constitué de plusieurs .exe et .sl (l'équivalent HPUX du .so) qui évidemment s'appellent entre eux.
    En l'occurrence, le problème vient d'une des shared libs. Je lui précise 9 librairies à linker et tout va bien pour les 6, mais à partir de la 7e c'est systématiquement unresolved.

    Voici des extraits du makefile (je vous épargne son intégralité parce qu'il est assez gros, ceci dit je peux l'envoyer si besoin).
    Options de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HPUX_SO_TYPE        = sl
    HPUX_LDFLAGS_SO     = -b +n               -E +s +b ${SHLIB_PATH}:${ORACLE_HOME}/lib:/usr/lib:/usr/ccs/lib
    HPUX_LDFLAGS_EXE    = /usr/ccs/lib/crt0.o -E +s +b ${SHLIB_PATH}:${ORACLE_HOME}/lib:/usr/lib:/usr/ccs/lib
    HPUX_LD_LIBS        = -lclntsh -ldld
    HPUX_LINTFLAGS      = -x -u
     
    LD_LIB_PATHS        = -L${CLIENT_TARGET} \
                  -L${ORACLE_HOME}/lib \
                  -L/usr/lib
    Définition de ma librairie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    libs23ctp0101_TARGET = libs23ctp0101.${SO_TYPE}
    libs23ctp0101_PATH = ${BUILD_ROOT}/call_coll/alloc_price/s23ctp0101
    libs23ctp0101_LIBRARIES = \
        -lksclcommon \
        -ldatabase \
        -lfields \
        -lshmem \
        -ls23ctp0102 \
        -ls23ctp0103 \
        -ls23ctp0110 \
        -ls23ctp0120 \
        -ls23ctp0140 
    libs23ctp0101_SOURCE = \
        s23ctp0101.c
     
     
    PROGRAM_LIST_SO = libs23cps0101.${SO_TYPE}
    Et la commande de compil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ${PROGRAM_LIST_SO}: ${${PARENT}_SOURCE:.c=.o}
    	cd ${OBJECT_TARGET} ; \
    	${LD} ${LD_LIB_PATHS} \
    	      ${LDFLAGS_SO} \
    	      ${${PARENT}_SOURCE:.c=.o} \
    	      -o ${CLIENT_TARGET}/${${PARENT}_TARGET} \
    	      ${FINAL_PASS:TRUE=${${PARENT}_LIBRARIES}} \
    	      ${LD_LIBS} ; \
    	cd ${BUILD_ROOT}
    Oui je sais c'est illisible...

    Et donc, comme je disais, avec un ldd voici ce que j'obtiens :
    ldd –r libs23ctp0101.sl
    blah blah
    <path>/libs23ctp0103.sl => <path>/libs23ctp0103.sl
    blah blah
    symbol not found: S23ctp0110 (<path>/libs23ctp0101.sl)
    symbol not found: S23ctp0120 (<path>/libs23ctp0101.sl)
    symbol not found: S23ctp0140 (<path>/libs23ctp0101.sl)
    Ce que j'ai essayé :
    - effacer et réécrire (des fois qu'il y ait un caractère non visible) : même résultat
    - inverser l'ordre des librairies : il trouve toujours les 6 premières (qui ne sont donc plus les mêmes) et pas les suivantes. Par exemple je me retrouve avec S23ctp0110 qui est bien résolu mais pas S23ctp0103.

    Les librairies sont bien présentes dans $LD_LIBRARY_PATH.
    J'ai vérifié les symboles (S23ctp0110, etc) sont corrects (d'ailleurs s'ils ne l'étaient pas, inverser l'ordre ne changerait pas le comportement).
    Extrait de s23ctp0101.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern int S23ctp0110 ( void );
    J'espère avoir été assez complet dans la description de mon problème. Si vous voulez plus de détails je serais ravi de les fournir, dans la limite des mesures de confidentialité

    Merci d'avance, et bonne journée/soirée/nuit suivant l'heure.

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    T'aurais pas une lettre en trop ici ? (:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ${PROGRAM_LIST_SO}: ${${PARENT}_SOURCE:.c=.o}
    	cd ${OBJECT_TARGET} ; \
    	${LD} ${LD_LIB_PATHS} \
    	      ${LDFLAGS_SO} \
    	      ${${PARENT}_SOURCE:.c=.o} \
    	      -o ${CLIENT_TARGET}/${${PARENT}_TARGET} \
    	      ${FINAL_PASS:TRUE=${${PARENT}_LIBRARIES}} \
    	      ${LD_LIBS} ; \
    	cd ${BUILD_ROOT}
    Plus tu pédales moins fort, moins t'avances plus vite.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Ah, j'y ai presque cru ! Mais non.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LD_LIB_PATHS        = -L${CLIENT_TARGET} \
                  -L${ORACLE_HOME}/lib \
                  -L/usr/lib
    CLIENT_TARGET et ORACLE_HOME sont corrects, j'ai bien vérifié.

    Merci quand même :]

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    J'ai un peu avancé. Le problème vient de la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${FINAL_PASS:TRUE=${${PARENT}_LIBRARIES}} \
    Ca effectue une substitution de la valeur de FINAL_PASS (qui vaut TRUE) avec la valeur de ${${PARENT}_LIBRARIES} qui dans mon cas vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        -lksclcommon \
        -ldatabase \
        -lfields \
        -lshmem \
        -ls23ctp0102 \
        -ls23ctp0103 \
        -ls23ctp0110 \
        -ls23ctp0120 \
        -ls23ctp0140
    Un echo me confirme cette valeur.
    Par contre, la substitution tronque la variable, va savoir pourquoi.

    Je ne suis peut-être pas dans le bon forum du coup, si ?

  5. #5
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Ca tronque dans quel sens ?

    Pour le forum, si, il n'y a pas de forum spécial makefile.
    Plus tu pédales moins fort, moins t'avances plus vite.

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Il tronque la fin. Je me retrouve donc avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -lksclcommon \
    -ldatabase \
    -lfields \
    -lshmem \
    -ls23ctp0102 \
    -ls23ctp0103
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -lksclcommon \
    -ldatabase \
    -lfields \
    -lshmem \
    -ls23ctp0102 \
    -ls23ctp0103 \
    -ls23ctp0110 \
    -ls23ctp0120 \
    -ls23ctp0140
    J'espérais que supprimer les sauts de ligne règlerait le problème, mais non. Ca doit être limité à un nombre de caractères parce que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -lksclcommon -ldatabase -lfields -lshmem -ls23ctp0102 -ls23ctp0103 -ls23ctp0110 -ls23ctp0120 -ls23ctp0140
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -lksclcommon -ldatabase -lfields -lshmem -ls23ctp0102 -ls23ctp0103 -ls23
    ce qui évidemment fait planter ma compil. Il doit y avoir une limite de 72 caractères pour la substitution de chaines, je suppose. Etrange que je n'en trouve pas mention dans les docs techniques, par contre... c'est peut-être autre chose.

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bon, je n'ai pas trouvé la raison de la limitation à 72 caractères, j'ai contourné le problème en séparant en deux ma liste de librairies.

    Dommage que patsubst et subst ne marchent pas avec le make de HPUX... (ou alors je n'ai pas trouvé comment faire).

    J'espère que ce post sera utile à quelqu'un :]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [html:link] récupérer valeur pour paramètre
    Par delph1983 dans le forum Struts 1
    Réponses: 13
    Dernier message: 08/06/2007, 14h23
  2. Réponses: 2
    Dernier message: 21/04/2007, 10h59
  3. Réponses: 5
    Dernier message: 15/01/2007, 21h15
  4. Symbole pour dire "compris entre deux nombres" ?
    Par JackBeauregard dans le forum Langage
    Réponses: 8
    Dernier message: 25/08/2006, 11h48
  5. [gcc/gdb] comment generer un fichier de symboles pour gdb
    Par Mokhtar BEN MESSAOUD dans le forum GDB
    Réponses: 1
    Dernier message: 09/02/2006, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo