begin process at 2012 05 27 16:08:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

 > EXEMPLE DE CHARGEMENT ET CREATION DE BIBLIOTHEQUE PARTAGEE SOUS LINUX

EXEMPLE DE CHARGEMENT ET CREATION DE BIBLIOTHEQUE PARTAGEE SOUS LINUX


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications Linux Niveau :Initié Date de création :21/02/2003 Date de mise à jour :28/02/2003 14:22:06 Vu :3 330

Auteur : to0me

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Ce programme est un exemple d'appel de bibliothèque partagée à chargement dynamique sous Linux. (Pour exemple la bibliothèque présente sur ce site)
L'appel tel qu'il est décrit ici risque de poser des problèmes en C++.          

Source

  • #include <dlfcn.h>
  • #include <stdio.h>
  • void*(*lib_search_call)(void*key,void*base,int arg3,int arg4,
  • int arg5,int arg6);
  • void*call_sort;
  • struct ele_m;
  • {
  • float *member1;
  • float *member2;
  • float *member_ref;
  • } ;
  • typedef struct ele_m elem ;
  • elem array_enr[6];
  • int main()
  • {
  • int i;
  • float *val_1,*val_2,*val_3;
  • float search;
  • void*retour;
  • int *result;
  • printf("on entre les données dans le tableau de structures :\n");
  • for(i=0;i<6;i++)
  • {
  • printf("enregistrement :%d\n", i);
  • printf("\n");
  • printf("valeur**donnée 1 structure** entrer un nombre :");
  • scanf("%f", &val_1);
  • printf("valeur**donnée 2 structure** entrer un nombre :");
  • scanf("%f", &val_2);
  • printf("valeur**donnée 3 structure** entrer un nombre :");
  • scanf("%f", &val_3);
  • array_enr[i].member1=val_1;
  • array_enr[i].member2=val_2;
  • array_enr[i].member3=val_3;
  • }
  • printf("**recherche**entrer un nombre :");
  • scanf("%f", &search);
  • if(call_sort=dlopen("/usr/local/lib/lib.so.x.x",RTLD_LAZY))
  • {
  • lib_search_call=dlsym(call_sort,"lib_search");
  • retour=(*lib_search_call)(&search,&array_enr[0].member3,6,1,12,4);
  • result=retour;
  • printf("%d", *result);
  • }
  • }
  • /*
  • Code librairie
  • Ne pas inclure dans le programme principal!
  • */
  • #define TRUE 1
  • #define FALSE -1
  • void*lib_search(void*key,void*base,int arg3,int arg4, int arg5, arg6)
  • {
  • float *v_receive_float, *sup_float;
  • void*ptr;
  • int TROUVE, middle, right, left;
  • switch (arg6)
  • {
  • case 4: v_receive_float=key; break;
  • /* à completer si besoin...
  • */
  • default : break ;
  • }
  • right = arg3-1;
  • left=0;
  • middle =-1;
  • TROUVE=FALSE;
  • while((left<right)&&(!TROUVE))
  • {
  • middle=(left+right)/2;
  • sup_float=base+(middle*arg5* arg4);
  • if(*sup_float==*v_receive_float)
  • {
  • TROUVE=TRUE;
  • } else if(*v_receive_float>*sup_float)
  • { left=middle+1;
  • } else {
  • right=middle-1;
  • }
  • }
  • ptr=&middle;
  • return ptr;
  • }
#include <dlfcn.h>
#include <stdio.h>




void*(*lib_search_call)(void*key,void*base,int arg3,int arg4,
                              int arg5,int arg6);

void*call_sort;


struct ele_m;
{
  float *member1;
  float *member2;
  float *member_ref;
  } ;
typedef struct ele_m elem ;
elem array_enr[6];


int main()
{

int i;
float *val_1,*val_2,*val_3;
float search;
void*retour;
int *result;


printf("on entre les données dans le tableau de structures :\n");
for(i=0;i<6;i++)
{
  printf("enregistrement :%d\n", i);
  printf("\n");
  printf("valeur**donnée 1 structure** entrer un nombre :");
  scanf("%f", &val_1);
  printf("valeur**donnée 2 structure** entrer un nombre :");
  scanf("%f", &val_2);
  printf("valeur**donnée 3 structure** entrer un nombre :");
  scanf("%f", &val_3);
  array_enr[i].member1=val_1;
  array_enr[i].member2=val_2;
  array_enr[i].member3=val_3;
}
printf("**recherche**entrer un nombre :");
scanf("%f", &search);  
if(call_sort=dlopen("/usr/local/lib/lib.so.x.x",RTLD_LAZY))
 {
   lib_search_call=dlsym(call_sort,"lib_search");
   retour=(*lib_search_call)(&search,&array_enr[0].member3,6,1,12,4);
   result=retour;
   printf("%d", *result);
}
}


/*
  Code librairie
  Ne pas inclure dans le programme principal!
  */

#define TRUE 1
#define FALSE -1

void*lib_search(void*key,void*base,int arg3,int arg4, int arg5, arg6)
{

  float *v_receive_float, *sup_float;
  void*ptr;
  
  int TROUVE, middle, right, left;
switch (arg6)
{  
  case 4: v_receive_float=key; break;
  /* à completer si besoin...
   */
default : break ;
}  

right = arg3-1;
left=0;
middle =-1;
TROUVE=FALSE;
while((left<right)&&(!TROUVE))
{ 
      middle=(left+right)/2;
      sup_float=base+(middle*arg5* arg4);
      if(*sup_float==*v_receive_float)
          { 
              TROUVE=TRUE;
              } else if(*v_receive_float>*sup_float)
                     { left=middle+1; 
                        } else {
                                   right=middle-1;
                                  }
}

ptr=&middle;
return ptr;
} 
    
     

 Conclusion

Directives de compilation
principal :
gcc -o test test.c -ldl
bibliothèque :
mettre dans un répertoire  ici /usr/local/lib
gcc -fpic -lib.c
gcc -shared -w1, -soname, lib.so.0 -o lib.so.0.x lib.o  


 Sources du même auteur

CREATION ET CHARGEMENT DE LIBRAIRIE PARTAGEE SOUS LINUX RECH...

 Sources de la même categorie

Source avec Zip TRAITEMENT D'IMAGE PGM par Jios
Source avec une capture COLORIMÈTRE NUMÉRIQUE LINUX par valchek
Source avec Zip TRAITEMENTS D'IMAGES AU FORMAT PGM AVEC LES ALGORITHMES DE C... par lemout
Source avec Zip ALGORITHME ACO INTERFACE GTK par RyBeN
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab

Commentaires et avis

Commentaire de ToasTy62 le 14/12/2003 17:54:22

rah exactement ske je cherchais marchi boucouuuu !!!
pr c++ des pbs? ta une autre solution sinon ?

Commentaire de ezaremba le 17/11/2005 11:56:17

Un grand merci. Visiblement ce post date un peu, mais ce genre d'exemple semble pas très répendu sur le net!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,825 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales