Bonjour tout le monde,
Pour un devoir pour mon ecole je dois produire un programme sous forme de bibliotheque static et dynamic avec le meme Makefile.
Mon probleme est sur la conception et utilisation de la bibliotheque dynamique.
Dans mon source en .c j'ai mis undevant la fonction que je veux partage (lors du prototypage de cette fonction)
Code : Sélectionner tout - Visualiser dans une fenêtre à part extern
dans mon Makefile j'ai:
et mon fichier .c pour lire ma bibliotheque est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 OBJ = $(SRC:.c=.o) CFLAGS = -W -Wall -fPIC -c compil: $(OBJ) dynamic: compil @echo "create dynamic library" @gcc -shared -o $(NAME).so $(OBJ)
Comme vous auriez pu le remarquez sur le nom de ma bibliotheque dynamique (my_library_i386-Darwin.so). Je travaille sous Mac Leopard.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <dlfcn.h> #include <stdio.h> #include <stdlib.h> int main() { void *handle; double (*my_library)(char *fmt, ...); void *error; handle = dlopen("./my_library_i386-Darwin.so", RTLD_NOW); if (!handle) { printf("error %s", dlerror()); exit; } my_printf = dlsym(handle, "ma_fonction_en_mode_extern"); error = dlerror(); if (error != NULL) { printf("error 2 %s", error); exit; } my_library("titi"); dlclose(handle); }
Je pense qu'il manque un lien ou autre.
Le probleme constate est du type:pas de symbole trouve dans my_library_i386-Darwin.so
Partager