Forum Linux.suse probleme de librairie partagée (dlopen,dlsym)

Posté par  .
Étiquettes : aucune
0
7
jan.
2008
J'ai développé un programme qui fait appel à une librairie partagée que j'ai également développé; les appels externes sont correctement réalisés sur d'autre Os linux (redhat en autre) mais sur Suse, les symboles ne sont pas connus :
"symbol lookup error ..." ; je recherche donc de meilleurs options de compil ou des meilleurs versions de compilateur ou encore d'autres suggestions .

SUSE LINUX 10.0 (X86-64) OSS
VERSION = 10.0

voici ce que j'utilise comme librairie systeme :

libGLU.so.1 => /usr/lib64/libGLU.so.1 (0x00002aaaaabd6000)
libXp.so.6 => /usr/X11R6/lib64/libXp.so.6 (0x00002aaaaad5b000)
libXt.so.6 => /usr/X11R6/lib64/libXt.so.6 (0x00002aaaaae64000)
libX11.so.6 => /usr/X11R6/lib64/libX11.so.6 (0x00002aaaaafc7000)
libUil.so.3 => /usr/X11R6/lib64/libUil.so.3 (0x00002aaaab1d6000)
libXm.so.3 => /usr/X11R6/lib64/libXm.so.3 (0x00002aaaab35e000)
libm.so.6 => /lib64/tls/libm.so.6 (0x00002aaaab705000)
libc.so.6 => /lib64/tls/libc.so.6 (0x00002aaaab85c000)
libXext.so.6 => /usr/X11R6/lib64/libXext.so.6 (0x00002aaaaba87000)
libGL.so.1 => /usr/lib64/libGL.so.1 (0x00002aaaabb99000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002aaaabd3b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002aaaabf37000)
libSM.so.6 => /usr/X11R6/lib64/libSM.so.6 (0x00002aaaac045000)
libICE.so.6 => /usr/X11R6/lib64/libICE.so.6 (0x00002aaaac14f000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaac26a000)
libMrm.so.3 => /usr/X11R6/lib64/libMrm.so.3 (0x00002aaaac36e000)
libXmu.so.6 => /usr/X11R6/lib64/libXmu.so.6 (0x00002aaaac493000)
/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x00002aaaac5ac000)
libXxf86vm.so.1 => /usr/X11R6/lib64/libXxf86vm.so.1
  • # Plus d'infos

    Posté par  (site web personnel) . Évalué à 1.

    Peut être peux tu donner une partie de ton code et surtout le message d'erreur complet.

    Pour utiliser dlopen ... tu as besoin d'utiliser libdl (flag -ldl sur le compilateur) mais je suppose que tu le sais. Après, sans message d'erreur, on ne peux rien te dire de plus.
    • [^] # Re: Plus d'infos

      Posté par  . Évalué à 0.

      Le message d'erreur est assez standard (dans le sens où le symbol n'est pas trouvé lors de l'appel a la fonction ) :

      main.x: symbol lookup error: libuser_0.so: undefined symbol: testEVA

      J'ai également essayé l'option de link "-Xlinker -E" mais sans meilleur résultat ; en fait il n'y a que sur Suse que j'ai ce probleme; sur redhat, tout marche bien (et également sous unix sun et hp) . Je commence à desespérer.

      Pour la compilation de la librairie, j'utilise:
      gcc -g -fPIC -c -I/usr/X11R6/include -c src/testEva.c

      puis au link :

      ld -g -shared -ldl -o libuser_0.so *.o -rpath /usr/X11R6/lib64 -L/usr/X11R6/lib64 -Bsymbolic /usr/lib64/libGLU.so.1 /usr/X11R6/lib 64/libXp.so.6 /usr/X11R6/lib64/libXt.so.6 /usr/lib64/libGLU.so.1 /usr/X11R6/lib64/libX11.so.6 /usr/X11R6/lib64/libUil.so /usr/X11R6/lib64/lib Xm.so /lib64/libm.so.6 /lib64/libc.so.6

      Pour la compilation du main :
      gcc -rdynamic -c -g -DUXOS -O3 -DNEW_GRAPH -DLINUX -I/usr/X11R6/include src/*.c -I/...

      puis pour le link :
      gcc -g -ldl -o main.x ./lib/tools.a






      • [^] # Re: Plus d'infos

        Posté par  . Évalué à 1.

        Tu pourrais déja essayer un 'nm' sur le 'so' que tu veux linker pour vérifier que le symbole que tu cherches y est présent, et nous dire ce que cela donnes.
        • [^] # Re: Plus d'infos

          Posté par  . Évalué à 0.

          C'est l'une des multiples verifications que j'ai faites au depart de mon pb :
          (...)
          U realloc@@GLIBC_2.2.5
          0000000000109868 B scrolledList
          0000000000109858 B separator
          U sprintf@@GLIBC_2.2.5
          U sscanf@@GLIBC_2.2.5
          U strcat@@GLIBC_2.2.5
          U strcmp@@GLIBC_2.2.5
          U strcpy@@GLIBC_2.2.5
          U strlen@@GLIBC_2.2.5
          U strrchr@@GLIBC_2.2.5
          00000000001098c0 b tab_id_ent
          U testEVA
          • [^] # Re: Plus d'infos

            Posté par  . Évalué à 1.

            le problème que je voie c'est que tu as:

            U testEVA

            ce qui signifie 'undefined', en gros ce symbol est demandé par le fichier sur lequel tu as fait le 'nm', donc il ne le fournis pas... d'ou impossibilité de le trouver par 'dlsym'.

            Faut vérifier du côté des sources pour voir où/comment est définie la fonction

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.