ld - relocation error : referenced symbol not found

ld - relocation error : referenced symbol not found - C++ - Programmation

Marsh Posté le 18-07-2008 à 12:06:48    

:hello:
 
 
Je suis une quiche en édition des liens, j'aurais besoin de votre aide...
 
J'ai une appli graphique qui fonctionne bien. Certaines fonctions sont wrappées en python pour pouvoir piloter l'appli depuis un script python. Lors de l'exécution depuis python j'ai un message d'erreur, patapay c'est sous Sun:
pyQVUI est mon interface avec mon appli.
 
 
  >>>>python screenSave.py  
Traceback (most recent call last):
  File "screenSave.py", line 10, in ?
    from pyQVUI import *
  File "/home/st14972/dev/dev_SunOS5.8_64/lib/python/pyQVUI.py", line 5, in ?
    import _pyQVUI
ImportError: ld.so.1: python: fatal: relocation error: file /home/st14972/dev/dev_SunOS5.8_64/lib/_pyQVUI.so: symbol __1cDstdNbasic_istream4Ccn0ALchar_traits4Cc___Funget6M_r1_: referenced symbol not found
 
 
 
 
ldd de _pyQVUI.so :
 

       libQUICKVIEW.so =>       /home/st14972/dev/./dev_SunOS5.8_64/lib/libQUICKVIEW.so
        libVRML.so =>    /home/st14972/dev/./dev_SunOS5.8_64/lib/libVRML.so
        libFX.so =>      /home/st14972/dev/./dev_SunOS5.8_64/lib/libFX.so
        libSTREAMS.so =>         /home/st14972/dev/./dev_SunOS5.8_64/lib/libSTREAMS.so
        libSMAUG.so =>   /home/st14972/dev/./dev_SunOS5.8_64/lib/libSMAUG.so
        libREADER.so =>  /home/st14972/dev/./dev_SunOS5.8_64/lib/libREADER.so
        libNS.so =>      /home/st14972/dev/./dev_SunOS5.8_64/lib/libNS.so
        libUIL.so =>     /home/st14972/dev/./dev_SunOS5.8_64/lib/libUIL.so
        libGL.so.1 =>    /usr/lib/sparcv9/libGL.so.1
        libGLU.so.1 =>   /usr/lib/sparcv9/libGLU.so.1
        libGLw.so.1 =>   /usr/lib/sparcv9/libGLw.so.1
        libdl.so.1 =>    /usr/lib/sparcv9/libdl.so.1
        libX11.so.4 =>   /usr/lib/sparcv9/libX11.so.4
        libXm.so.4 =>    /usr/lib/sparcv9/libXm.so.4
        libXt.so.4 =>    /usr/lib/sparcv9/libXt.so.4
        libXext.so.0 =>  /usr/lib/sparcv9/libXext.so.0
        libXmu.so.4 =>   /usr/lib/sparcv9/libXmu.so.4
        libMrm.so.4 =>   /usr/lib/sparcv9/libMrm.so.4
        libpython2.4.so.1.0 =>   /home/egat/tools/pythonpack.2.3/local.SunOS.Generic_117350-08_64/lib/libpython2.4.so.1.0
        libtcl.so =>     /home/egat/tools/pythonpack.2.3/local.SunOS.Generic_117350-08_64/lib/libtcl.so
        libtk8.4.so =>   /home/egat/tools/pythonpack.2.3/local.SunOS.Generic_117350-08_64/lib/libtk8.4.so
        libresolv.so.2 =>        /usr/lib/sparcv9/libresolv.so.2
        libCVU.so =>     /vobs/aer/quickview/dev/dev_SunOS5.8_64/data/sftvqvui/qvfile/SLIB//libCVU.so
        libqual.so =>    /home/st14972/dev/./dev_SunOS5.8_64/lib/libqual.so
        libfutil.so =>   /home/st14972/dev/./dev_SunOS5.8_64/lib/libfutil.so
        libmoda.so =>    /home/st14972/dev/./dev_SunOS5.8_64/lib/libmoda.so
        libdrago.so =>   /home/st14972/dev/./dev_SunOS5.8_64/lib/libdrago.so
        libdamas.so =>   /home/st14972/dev/./dev_SunOS5.8_64/lib/libdamas.so
        liberrare.so =>  /home/st14972/dev/./dev_SunOS5.8_64/lib/liberrare.so
        libsda.so =>     /home/st14972/dev/./dev_SunOS5.8_64/lib/libsda.so
        libmutil.so =>   /home/st14972/dev/./dev_SunOS5.8_64/lib/libmutil.so
        libm.so.1 =>     /usr/lib/sparcv9/libm.so.1
        libF77.so.4 =>   /opt/SUNWspro/lib/v9/libF77.so.4
        libsunmath.so.1 =>       /opt/SUNWspro/lib/v9/libsunmath.so.1
        libM77.so.2 =>   /opt/SUNWspro/lib/v9/libM77.so.2
        libfsu.so.1 =>   /opt/SUNWspro/lib/v9/libfsu.so.1
        libl.so.1 =>     /usr/lib/sparcv9/libl.so.1
        libpthread.so.1 =>       /usr/lib/sparcv9/libpthread.so.1
        libxnet.so =>    /usr/lib/sparcv9/libxnet.so
        libnsl.so.1 =>   /usr/lib/sparcv9/libnsl.so.1
        libsocket.so.1 =>        /usr/lib/sparcv9/libsocket.so.1
        libCrun.so.1 =>  /usr/lib/sparcv9/libCrun.so.1
        libdga.so.1 =>   /usr/openwin/lib/sparcv9/libdga.so.1
        libc.so.1 =>     /usr/lib/64/libc.so.1
        libintl.so.1 =>  /usr/lib/64/libintl.so.1
        libSM.so.6 =>    /usr/openwin/lib/sparcv9/libSM.so.6
        libICE.so.6 =>   /usr/openwin/lib/sparcv9/libICE.so.6
        librt.so.1 =>    /usr/lib/64/librt.so.1
        libgcc_s.so.1 =>         /home/egat/tools/gccpack.1.1/local.SunOS.Generic_117350-08/lib/sparcv9/libgcc_s.so.1
        libmp.so.2 =>    /usr/lib/64/libmp.so.2
        libaio.so.1 =>   /usr/lib/64/libaio.so.1
        libthread.so.1 =>        /usr/lib/64/libthread.so.1
        /usr/platform/SUNW,Sun-Blade-1000/lib/sparcv9/libc_psr.so.1


 
 
Où est-ce que je peux trouver le symbole manquant (__1cDstdNbasic_istream4Ccn0ALchar_traits4Cc___Funget6M_r1_)?  
 
J'utilise aCC pour compiler. (patapay)


Message édité par Elmoricq le 21-07-2008 à 10:32:37

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 18-07-2008 à 12:06:48   

Reply

Marsh Posté le 21-07-2008 à 10:21:44    

up :)


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 11:28:35    


J'ai vu que mon post a été déplacé dans la catégorie python, pas de souci.
 
Je veux juste souligner que bien que je parle de wrapping python les développeurs C peuvent surement m'aider car avec le code C généré par swig je crée une lib dynamique avec mon compilateur C, et le import depuis python révèle juste un problème avec le ld, j'ai donc mal fait mon link après la compilation.


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 11:30:08    

problème de version d'ABI.
Fait un nm /path/to/lib et grep dedans ton symbole manquant.
Après avec nm -C tu peux le dé-mangler pour savoir à quoi ça correspond comme fonction.
 
Est-ce que cette lib elle est à toi, genre style c'est toi qui l'a compilé ?

Reply

Marsh Posté le 21-07-2008 à 11:30:55    

c'est du C++ ce code :o

Reply

Marsh Posté le 21-07-2008 à 11:39:26    

J'y connais rien en Python, mais si y'a du C++ derrière, je te conseillerais de regarder les includes dans les fichiers sources.
 
Genre #include <string>, #include <iostream>...
 
Si tu trouves du #include "string.h" par exemple, essaye de le remplacer par un <string>
 
Après là comme ça, je peux pas vraiment t'aider, en voyant __1cDstdNbasic_istream4Ccn0ALchar_traits4Cc___Funget6M_r1_, on a l'impression qu'il manque la librairie istream, qui devrait être linkée automatiquement quand tu fais un #include <istream> (ou iostream) dans ton code...


---------------
Paléoanthropologie, évolution de l'espèce humaine et préhistoire
Reply

Marsh Posté le 21-07-2008 à 11:40:01    

c'est un peu comme si je faisais une prière et que Dieu mettait un [:drapo] dans ma prière [:alphat]  
D'ailleurs avant de me coucher hier j'ai pensé à demangle, un MP de Dieu probablement.  
Je sais que c'est du C++, mais ça faisait deux caractère à écrire en plus :o
 
Comment tu sais que c'est un problème d'ABI? Est-ce que ça veut dire qu'une lib va chercher du 32bits au lieu de 64?  
 
Est-ce que choisir Abby c'est un hasard?


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 11:40:36    

Oops, j'ai lu en diagonale. :o

 

Je remets dans C++.


Message édité par Elmoricq le 21-07-2008 à 11:40:56
Reply

Marsh Posté le 21-07-2008 à 11:43:27    

FrigoAcide a écrit :

J'y connais rien en Python, mais si y'a du C++ derrière, je te conseillerais de regarder les includes dans les fichiers sources.
 
Genre #include <string>, #include <iostream>...
 
Si tu trouves du #include "string.h" par exemple, essaye de le remplacer par un <string>
 
Après là comme ça, je peux pas vraiment t'aider, en voyant __1cDstdNbasic_istream4Ccn0ALchar_traits4Cc___Funget6M_r1_, on a l'impression qu'il manque la librairie istream, qui devrait être linkée automatiquement quand tu fais un #include <istream> (ou iostream) dans ton code...


 
 
Ca compile sans problème, je cherche effectivement la lib qui contient mon symbole not found


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 11:45:13    

Taz a écrit :

problème de version d'ABI.
Fait un nm /path/to/lib et grep dedans ton symbole manquant.
Après avec nm -C tu peux le dé-mangler pour savoir à quoi ça correspond comme fonction.
 
Est-ce que cette lib elle est à toi, genre style c'est toi qui l'a compilé ?


 
 
c'est bien moi qui l'ai compilée au fait.
 


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 11:45:13   

Reply

Marsh Posté le 21-07-2008 à 11:54:25    

le -C marche pas, ni --demangle, j'échoue
nm -C /home/st14972/dev/dev_SunOS5.8_64/lib/_pyQVUI.so | grep unget
                 U __1cDstdNbasic_istream4Ccn0ALchar_traits4Cc___Funget6M_r1_


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 11:58:06    

T'es sous Sun, c'est ça ?
Regarde si t'as pas un nm sous /usr/xpg4/bin ou /usr/ccs/bin, c'est pas le même que par défaut et il prend l'option -C celui-là.

Reply

Marsh Posté le 21-07-2008 à 12:04:13    

Elmoricq a écrit :

T'es sous Sun, c'est ça ?
Regarde si t'as pas un nm sous /usr/xpg4/bin ou /usr/ccs/bin, c'est pas le même que par défaut et il prend l'option -C celui-là.


 
 
Merci,
 
/usr/ccs/bin/nm -C /home/st14972/dev/dev_SunOS5.8_64/lib/_pyQVUI.so | grep unget  
[11104] |             0|           0|FUNC |GLOB |0    |UNDEF  |std::basic_istream<char,std::char_traits<char> >&std::basic_istream<char,std::char_traits<char> >::unget()
                                                       [__1cDstdNbasic_istream4Ccn0ALchar_traits4Cc___Funget6M_r1_]
 
 
effectivement mon PATH est pollué par un pack gcc qui amène des lib et des outils à la con. Mais je crois qu'il est nécessaire pour l'utilisation du python que je dois utiliser. Je vais essayer de le virer de mon environnent.  


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 12:54:33    

C'est Abby NCIS.

Reply

Marsh Posté le 21-07-2008 à 14:28:52    

je capte pas d'où vient cette méthode unget(), si seulement j'arrivais à trouver où je l'appelle...


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 22:05:01    

elle sort probablement d'une méthode template ou inlinée si ça vient pas de toi.

Reply

Marsh Posté le 21-07-2008 à 22:14:52    

elle est pas dans ma version linux ça aussi je capte pas :fou:
 
Sinon elle est defined dans le nm du binaire de mon appli :
 
python : import _pyQVUI
_pyQVUI.so (interface de wrapping avec l'appli) -> unget Undefined
appli -> unget Defined
 
Le symbole devrait pas être résolu à l'import?


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 21-07-2008 à 22:30:04    

bah si c'est ce qui se passe, sauf que ça trouve pas. A part comparer les lib utilisées, je vois pas trop. Dans ton appli, le symbole est à résoudre ou bien il est défini ?
 
acc c'est bien, mais est-ce que ça a la même ABI que gcc ? (vu que tu pull libgcc)

Reply

Marsh Posté le 21-07-2008 à 22:43:54    

dans l'appli il est à résoudre, même il est pas pas utilisé, j'ai fait des grep unget partout et je trouve rien, j'ai même pas de ifstream...  
 
je sais pas comment on vérifie le type? version? d'ABI, je sais juste que la variable d'environnement ABI=64 quand on st en 64 bits et pas définie quand on est en 32.


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 22-07-2008 à 00:18:41    

Très fatigué, mais en passant et en lecture diagonale, si je dis pas trop de conneries:

 
kaloskagatos a écrit :

dans l'appli il est à résoudre, même il est pas pas utilisé, j'ai fait des grep unget partout et je trouve rien, j'ai même pas de ifstream...

 

Ca fait quelque temps que j'ai pas joué à faire des libs python, mais est-ce qu'il ne chercherait à résoudre certains symboles, même s'ils ne sont jamais appelés, lors de l'import?

 
kaloskagatos a écrit :


je sais pas comment on vérifie le type? version? d'ABI, je sais juste que la variable d'environnement ABI=64 quand on st en 64 bits et pas définie quand on est en 32.

 

Est-ce que tu peux donner les headers de ta lib et de ton appli? Genre objdump -p?

 
Spoiler :

Au fait, avec /home/$USER dans ce genre, tu travaillerais pas dans le coin de St Martin?  [:cupra]


Message édité par Gf4x3443 le 22-07-2008 à 00:20:25
Reply

Marsh Posté le 22-07-2008 à 00:28:15    

Je te donne ça demain, quand je pourrai passer le firewall de Saint-Martin [:ddr555]


Message édité par kaloskagatos le 22-07-2008 à 00:28:22

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 22-07-2008 à 09:00:10    

t'as un gnuld ou pas ? (--as-needed)

 

si tu rajoutes un main à ton wrapper, il s'exécute ok ?

 

( http://udrepper.livejournal.com/8790.html article sympa sur comment faire des bonnes tartes)


Message édité par Taz le 22-07-2008 à 09:00:25
Reply

Marsh Posté le 22-07-2008 à 10:47:44    

kaloskagatos a écrit :

dans l'appli il est à résoudre, même il est pas pas utilisé, j'ai fait des grep unget partout et je trouve rien, j'ai même pas de ifstream...  
 
je sais pas comment on vérifie le type? version? d'ABI, je sais juste que la variable d'environnement ABI=64 quand on st en 64 bits et pas définie quand on est en 32.


 
 
un peu endormi hier soir, dans l'appli le symbole est défini, mais pas dans le wrapper


Message édité par kaloskagatos le 22-07-2008 à 10:48:18

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 22-07-2008 à 14:57:15    

si dans l'appli t'arrives à localiser dans quelle unité de compilation il est défini, ça pourrait te tuyauter un peu, non ?
 
tu fais des nm sur .o et tu cherches :)

Reply

Marsh Posté le 22-07-2008 à 18:38:24    

j'ai trouvé qu'en fait c'est une fucking lib à laquelle je me link statiquement mais avec un -lfukinglib donc je croyais que j'avais que des lib dynamiques. Le problème serait donc que cette lib a été compilée avec un compilo différent du mien et que cette méthode unget est obsolète par exemple?


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 22-07-2008 à 19:03:39    

question bête: y'a pas moyen de demander à python de pas chercher à résoudre tous les symboles à l'import de mon module wrappé?


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed