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 Christophe Painchaud . Évalué à 1.
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 zeus312 . Évalué à 1.
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 Christophe Painchaud . Évalué à 2.
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 Sylvain Garden (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 zeus312 . Évalué à 1.
Mais merci pour ton aide ainsi qu'à vous autres
[^] # Re: info ld
Posté par Raphaël G. (site web personnel) . Évalué à 2.
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 gaaaaaAab . Évalué à 1.
parce que si ce n'est pas le cas, tu as peut-être des problèmes de mangling ...
[^] # Re: compilo ?
Posté par zeus312 . Évalué à 1.
[^] # Re: compilo ?
Posté par zeus312 . Évalué à 1.
# Ajout d'information
Posté par zeus312 . Évalué à 1.
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.