Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme de librairie dynamique

14 réponses
Avatar
Saïd
Bonjour,

Soit deux fichiers C appeles malib.c et monprog.c
malib.c:
---------
extern int reponse;
int demander_a_librairie(void)
{
return reponse;
}
-------

monprog.c:
---------
#include <stdio.h>

int demander_a_librairie(void);
int reponse;

int main(void)
{
reponse=42;
printf("la reponse est %d\n",demander_a_librairie());
}
---------
Sous linux je peux creer une librairie partagee a partir de malib.c

ladjal/kahina - bin/sostuff $ gcc -c -o malib.o malib.c
ladjal/kahina - bin/sostuff $ ld -shared -soname libmalib.so -o libmalib.so
malib.o
ladjal/kahina - bin/sostuff $ gcc -L. -o monprog monprog.c -lmalib
ladjal/kahina - bin/sostuff $ LD_LIBRARY_PATH=. ./monprog
la reponse est 42

Autrement dit libmalib.so connait un symbole qui lui est externe et elle
attend qu'il soit defini par le programme qui l'appelle.

Sous Mac OS X (10.3) je ne peux meme pas creer la libraire libmalib.dylib:
brian-~/bin/sostuff $ gcc -c -o malib.o malib.c
brian-~/bin/sostuff $ gcc -dynamiclib -install_name libmalib.dylib -o
libmalib.dylib malib.o
ld: Undefined symbols:
_reponse
/usr/bin/libtool: internal link edit command failed

Est-ce qu'il y a moyen de creer des librairies qui ne deinissent pas tous
leurs symboles sous Mac OS X? une idee pour contourner le probleme?

Toute aide serait tres appreciable. Merci.

--
Saïd.
C programmers never die - they're just cast into void.

4 réponses

1 2
Avatar
DINH Viêt Hoà

je veux tester dans un script bash si LD_LIBRARY_PATH est définie.

j'ai essayé ca
if [ "${LD_LIBRARY_PATH}" != "" ]; then echo blabla ; fi

mais si elle est pas définie, j'obtient :
-bash: LD_LIBRARY_PATH: unbound variable


bizarre.

Peux-tu exhiber un script simple qui montre le problème ?

avec :
<<
#!/bin/sh
if [ "${LD_LIBRARY_PATH}" != "" ]; then echo blabla ; fi




je n'ai pas le problème.

Sinon, tu peux essayer :

<<
#!/bin/sh
if [ "${LD_LIBRARY_PATH:-}" != "" ]; then echo blabla ; fi




--
DINH V. Hoa,

"Ma tuxitude me beastifie" -- sunZ


Avatar
twigster
merci bcp ca a marché en mettant le :-

merci pour l'astuce :o))
Avatar
Saïd
DINH Viêt Hoà :

d'abord merci vous avez résolu mes pbs existenciels :)

mais j'ai juste encore une question:

la variable d'env LD_LIBRARY_PATH est-elle utile sous OSX?


oui, ça permet de donner au chargeur de bibliothèque les chemins où
trouver les différentes bibliothèques dynamiques.



T'es sur?
brian-~/bin/sostuff $ pwd
/Users/said/bin/sostuff
brian-~/bin/sostuff $ ls -l
total 80
drwxr-xr-x 2 said said 68 21 Nov 21:49 elsewhere
-rw-r--r-- 1 said said 796 21 Nov 01:21 libmalib.a
-rw-r--r-- 1 said said 9120 21 Nov 11:35 libmalib.dylib
-rw-r--r-- 1 said said 73 21 Nov 00:31 malib.c
-rw-r--r-- 1 said said 612 21 Nov 00:31 malib.o
-rwxr-xr-x 1 said said 11604 21 Nov 11:36 monprog
-rw-r--r-- 1 said said 154 21 Nov 01:21 monprog.c
brian-~/bin/sostuff $ ./monprog
la reponse est 42
brian-~/bin/sostuff $ mv monprog elsewhere
brian-~/bin/sostuff $ cd elsewhere
brian-~/bin/sostuff/elsewhere $ export
LD_LIBRARY_PATH=/Users/said/bin/sostuff
brian-~/bin/sostuff/elsewhere $ ./monprog
dyld: ./monprog can't open library: libmalib.dylib (No such file or
directory, errno = 2)
zsh: trace trap ./monprog
brian-~/bin/sostuff/elsewhere $

--
Saïd.
C programmers never die - they're just cast into void.


Avatar
DINH Viêt Hoà

T'es sur?
brian-~/bin/sostuff $ pwd
/Users/said/bin/sostuff
brian-~/bin/sostuff $ ls -l
total 80
drwxr-xr-x 2 said said 68 21 Nov 21:49 elsewhere
-rw-r--r-- 1 said said 796 21 Nov 01:21 libmalib.a
-rw-r--r-- 1 said said 9120 21 Nov 11:35 libmalib.dylib
-rw-r--r-- 1 said said 73 21 Nov 00:31 malib.c
-rw-r--r-- 1 said said 612 21 Nov 00:31 malib.o
-rwxr-xr-x 1 said said 11604 21 Nov 11:36 monprog
-rw-r--r-- 1 said said 154 21 Nov 01:21 monprog.c
brian-~/bin/sostuff $ ./monprog
la reponse est 42
brian-~/bin/sostuff $ mv monprog elsewhere
brian-~/bin/sostuff $ cd elsewhere
brian-~/bin/sostuff/elsewhere $ export
LD_LIBRARY_PATH=/Users/said/bin/sostuff
brian-~/bin/sostuff/elsewhere $ ./monprog
dyld: ./monprog can't open library: libmalib.dylib (No such file or
directory, errno = 2)
zsh: trace trap ./monprog
brian-~/bin/sostuff/elsewhere $


ah pardon,
c'est DYLD_LIBRARY_PATH.
$ man dyld

--
DINH V. Hoa,

"Ma tuxitude me beastifie" -- sunZ

1 2