Bonjour,
J'ai suivi un cours assez sympa.
J'ai fait un test avec un ptit programme, un truc vite fait dont voici les codes:
entete lib
code source lib
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 #ifndef _TEST_PLUGIN_ #define _TEST_PLUGIN_ /* J'ai mis la definition de la structure ici juste pour ne pas avoir d'erreur ou de warning lors de la compilation de ce test. */ struct _test { char *p_name; }; typedef struct _test test_s; char *function_name (test_s *p_test_); #endif /* _TEST_PLUGIN_ */
Le programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include "test_plugin.h" char *function_name (test_s *p_test_) { return p_test_->p_name; }
A la compilation aucun souci. A l'execution:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> struct _test { char *p_name; }; typedef struct _test test_s; /* Pointeur vers une fonction d'un plugin. */ char * (*function_test)(test_s *p_test_); int main (int argc, char **argv) { void *p_handle = NULL; char *error = NULL; if (argc == 1) { printf ("Il faut specifier un plugin a charger !\n"); exit (0); } /* Allocation de la structure. */ test_s *p_test = malloc (sizeof (test_s)); if (p_test == NULL) { printf ("Allocation de 'p_test' echouee !\n"); exit (1); } /* Remplissage de la structure. */ p_test->p_name = "o0° CSoldier °0o"; /* Chargement de la librairie. */ p_handle = dlopen (argv[1], RTLD_LAZY); if (p_handle == NULL) { fprintf (stderr, "%s\n", dlerror ()); free (p_test); exit (1); } /* Etablissement d'un symbol vers la fonction du plugin. */ function_test = dlsym (p_handle, "function_name"); if ((error = dlerror ()) != NULL) { fprintf (stderr, "%s\n", dlerror ()); free (p_test); exit (1); } /* Appel de la fonction dans la lib. */ printf ("Mon nom est: %s\n", (*function_test)(p_test)); /* Terminaison de la liaison. */ dlclose (p_handle); /* Liberation de la memoire. */ free (p_test); return EXIT_SUCCESS; }
A titre d'info, tous les fichiers se trouvent dans un meme dossier et je ne vois pas pourquoi il ne trouve pas mon fichier .so !test_plugin.so: cannot open shared object file: No such file or directory
Pouvez-vous m'aider ?
Merci
Partager