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 :
Définition de ma librairie :
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
Et la commande de compil
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}
Oui je sais c'est illisible...
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}
Et donc, comme je disais, avec un ldd voici ce que j'obtiens :
Ce que j'ai essayé :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)
- 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
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é
Code : Sélectionner tout - Visualiser dans une fenêtre à part extern int S23ctp0110 ( void );
Merci d'avance, et bonne journée/soirée/nuit suivant l'heure.
Partager