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
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.
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.
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.
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.
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
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 $
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 $