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 Mildred (site web personnel) . Évalué à 1.
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 esm . Évalué à 0.
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 Christophe --- . Évalué à 1.
[^] # Re: Plus d'infos
Posté par esm . Évalué à 0.
(...)
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 Christophe --- . Évalué à 1.
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.