Forum Programmation.c++ Problème d'exécution d'une librairie dynamique

Posté par  .
Étiquettes : aucune
0
26
avr.
2007
Bonjour,

Je tente d'exécuter une librairie .so avec un exécutable qui va lors de l'exécution chercher cette librairie par le biais du LD_LIBRARY_PATH.
Problème lors de l'exécution j'ai un undefined symbol.
Ce symbol est effectivement undefine dans la lib .so mais pas dans le .exe de l'application que je lance (je le sais grâce à la commande nm).
Comment puis je faire pour faire en sorte que le programme aille chercher le bon symbol défini dans le .exe et ne s'arrête pas à celui de la lib .so

Merci pour votre aide
  • # output des command de debug

    Posté par  . Évalué à 1.

    Hello,

    Je pense qu'une copie exact du message d'erreur, ainsi qu'un 'ldd' de l'exécutable en question ainsi que le résultat de nm pourraient faire avancer le schmilblik :)
    • [^] # Re: output des command de debug

      Posté par  . Évalué à 1.

      Voici le message d'erreur du log:
      SrvOpeKernel.exe: symbol lookup error: /view/OPW_E3K_Suse-9.3.dev/vobs/ProcWare/E3K/Ope/delivery/lib/libOPWUSR.so: undefined symbol: _ZN11C_IOManager3GetEv

      Voici le résultat du ldd:
      libOPWUSR.so => /view/OPW_E3K_Suse-9.3.dev/vobs/ProcWare/E3K/Ope/delivery/lib/libOPWUSR.so (0x404f8000)

      voici les résultats du nm pour le .exe:
      SrvOpeKernel.exe:0819690e T _ZN11C_IOManager3GetEv

      voici les résultats du nm pour la lib .so:
      U _ZN11C_IOManager3GetEv
      • [^] # Re: output des command de debug

        Posté par  . Évalué à 2.

        Là j'admets que je sèche ...

        SrvOpeKernel.exe:0819690e T _ZN11C_IOManager3GetEv <-- le T signifie que ton symbol est un ' Global text symbol', le fait qu'il soit global devrait justement régler le problème.
  • # info ld

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

    [...]
    `-E'
    `--export-dynamic'
    When creating a dynamically linked executable, add all symbols to
    the dynamic symbol table. The dynamic symbol table is the set of
    symbols which are visible from dynamic objects at run time.

    If you do not use this option, the dynamic symbol table will
    normally contain only those symbols which are referenced by some
    dynamic object mentioned in the link.

    If you use `dlopen' to load a dynamic object which needs to refer
    back to the symbols defined by the program, rather than some other
    dynamic object, then you will probably need to use this option when
    linking the program itself.

    You can also use the version script to control what symbols should
    be added to the dynamic symbol table if the output format supports
    it. See the description of `--version-script' in VERSION.
    [...]
    • [^] # Re: info ld

      Posté par  . Évalué à 1.

      J'ai essayé cette option mais lors de l'édition des liens il n'a pas voulu linker avec les librairies.
      Mais merci pour ton aide ainsi qu'à vous autres
      • [^] # Re: info ld

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

        Hum, c'est moi où tu utilise du .exe ???

        Que veux-tu faire avec du format win32 sous linux ?
        Enfin j'arrive pas a comprendre comment on peux associer .exe+.so, pour moi c'est soit .exe+.dll soit binaire+.so...

        Bon si tu utilise wine pour le lancer, tu as peut-être un bug dans son code ?
  • # compilo ?

    Posté par  . Évalué à 1.

    tout a été compilé avec le même compilo ?

    parce que si ce n'est pas le cas, tu as peut-être des problèmes de mangling ...
    • [^] # Re: compilo ?

      Posté par  . Évalué à 1.

      Bonne idée mais c'est le même compilo
    • [^] # Re: compilo ?

      Posté par  . Évalué à 1.

      Bonne idée mais c'est le même compilo
  • # Ajout d'information

    Posté par  . Évalué à 1.

    Désolé pour le manque d'explication mais c'est un binaire avec un .so
    le .exe dont je parle est simplement une redéfinition.

    Par contre le symbol qui me pose problème est static et apparement cela peut me poser des problèmes peut être.
    Une idée ?

Suivre le flux des commentaires

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