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 : 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_ */
code source lib

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;
}
Le programme

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 la compilation aucun souci. A l'execution:
test_plugin.so: cannot open shared object file: No such file or directory
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 !

Pouvez-vous m'aider ?
Merci