IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Importer une librairie de fonctions


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut Importer une librairie de fonctions
    Bonsoir à tous et à toutes ,


    Je travail sur un projet dont une librarie de fonctions doit étre importée , pour ça j'ai ajouter toute la librarie de fonctions a mon compilateur .


    Le probléme c'est une fois le code créer la fonction n'est pas trouver par le Linker Error BN_set_bit Not Found , BN_Copy Not Found .


    Les deux fonctions sont bien présentes dans le fichier BN_Librairie.C

    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
     
    BIGNUM *BN_copy(a, b)
    BIGNUM *a;
    BIGNUM *b;
    	{
    	int i;
    	BN_ULONG *A,*B;
     
    	bn_check_top(b);
     
    	if (a == b) return(a);
    	if (bn_wexpand(a,b->top) == NULL) return(NULL);
     
    #if 1
    	A=a->d;
    	B=b->d;
    	for (i=b->top&(~7); i>0; i-=8)
    		{
    		A[0]=B[0];
    		A[1]=B[1];
    		A[2]=B[2];
    		A[3]=B[3];
    		A[4]=B[4];
    		A[5]=B[5];
    		A[6]=B[6];
    		A[7]=B[7];
    		A+=8;
    		B+=8;
    		}
     
    }


    La Fonction BN_set_bit

    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
     
     
    int BN_set_bit(a, n)
    BIGNUM *a;
    int n;
    	{
    	int i,j,k;
     
    	i=n/BN_BITS2;
    	j=n%BN_BITS2;
    	if (a->top <= i)
    		{
    		if (bn_wexpand(a,i+1) == NULL) return(0);
    		for(k=a->top; k<i+1; k++)
    			a->d[k]=0;
    		a->top=i+1;
    		}
     
    	a->d[i]|=(1L<<j);
    	return(1);
    	}


    J'ai créer un repertoire " Librarairie_de_fonctions " ou on trouveras toutes les
    FONCTIONS utilisées et les fichier d'en téte pour que le LINKER lire les fonctions à partir de ce répertoire de fonctions .



    les fichiers d'en téte que j'utilise .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include "librairie_de_fonctions/bn.h"


    Le LINKER ne trouve tujours pas les fonctions malgrés que celles ci soient présentes dans le fichier BN_Librairie.c
    Je ne comprends pas vraiment d'ou ça provient .


    Merci pour vos conseils et suggéstions conçernant ce probléme d'utilisation d'une librairie de fonctions .

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    un linker associe des fichiers contenant du code exécutable et non pas des fichiers sources

    Si le compilo ne bronche pas c'est qu'il trouve bien le header qui déclare les fonctions

    Le linker râle car il ne trouve pas de code exécutable à linker qui contient la fonction. le linker se fout des fichier sources....

    Il faut donc compiler le fichier source qui contient ces fonctions afin de présenter au linker un fichier avec du code exécutable (*.o ou s'il s'agit d'un libraire partagée un *.lib ou *.a ou un *.so selon ta plateforme et tes options de linkage).
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonsoir à tous et à toutes ,


    Merci pour la réponse , les focntions sont dans le fichier bn_librarire.C , si on compile ça résoudera PAS le probléme je l'ai déja essayer , TOUTES les focntions sont dans ce fichier *.C quand j'utilise une des focntions à la compil c'est 0 erreurs mais 'est au LINKAGE que j'ai des erreurs pour chaque focntions ajoutées et ainsi de suite .

    On y ajoutant les fichiers d'en téte nécessaire et ADEQUAT n'as pas résolu le probléme les FONCTIONS sont présentes dans le fichier BN.LIBRIARIE.C mais le
    LINKER affiche toujours des erreurs Function not found .


    C'est une librarie de fonctions
    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
     
    /* crypto/bn/bn_lib.c 
        
     *   Library BN_LIB_C 
     * This library is free for commercial use as long  the code are not to be   removed.
     * If this package is used in a product, Eric Young should be given attribution
     * as the author of the parts of the library used.
     * This can be in the form of a textual message at program startup or
     * in documentation (online or textual) provided with the package.
     
     
     The licence and distribution terms for any publically available version or
     * derivative of this code cannot be changed.  i.e. this code cannot simply be
     * copied and put under another distribution licence
     * [including the GNU Public Licence.] */



    Merci quand méme pour ton conseil et ta disponibilité .

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    • Primo as-tu compilé la bibliothèque, ou as-tu déjà un .a ou .so (sous unixoide) ou un .dll (sous windows) ? Si tu n'as aucun de ces derniers éléments, il faut commencer par compiler la biblothèque, qui dans ce cas a dû être fournie avec un Makefile ou l'équivalent.


    • Ensuite, pour que le linker comprenne que c'est là qu'il faut chercher le code compilé, il faut soit lui fournir le chemin (et éventuellement le nonm complet) dans les options d'un outil de développement du style DevC++, CV++, etc.., soit sous unixoide ajouter dans la ligne de link un "-Lchemin -lbibliotheque" soit "chemin/biblotheque_en_entier"

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonjour souviron34 ,


    D'accord , merci pour ton intervention .

    on résume que le LINKER faudrait qui LISE à partir d'un Librarie *.LIB pour éviter les erreurs au LINKAGE .

    Le Linker aura besoin de lire de la LIBRAIRIE *.LIB comme l'as souligné vicenzo
    sous différentes formes : *.a , *.lib .

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    UP ,


    La bibliothéque *.LIB a été importée et le chemin de la biblio est dans le chemin du LINKER .

    Les fonctions sont présntes dans celles ci mais toujours des messages d'erreurs


    Autre solution , j'ai compilé le fichier BN.C comme conseillé par vicenzo

    et ça a generée une librarairie BN_LIB.LIB , celle i a été ajoutée au LINKER mais toujours des messages d'erreurs .


    J'ai passer 12 HEURES pour régler ce probléme sans succés , si y'a des gens qui pourraient me conseilé voir suggérer une autre altérnative .


    Merci pour vos conseils .

  7. #7
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    1/ Les messages d'erreurs sont ils les mêmes ?

    2/ Ton projet final est en C ou C++ ? (cela peut causer des soucis de décoration de noms de fonctions et ton linker peut ne pas les trouver)

    3/ tu utilises windows car tu génère un .lib. Tes fonctions ont elle été exportées ( soit par utilisation d'un *.def ou ajout de la convention __declspec(dllexport) dans les déclarations / définition des fonctions)

    Je pense que ton soucis doit résider dans le point N°3..

    Vicenzo.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonsoir vicenzo ,



    Citation Envoyé par vicenzo Voir le message
    1/ Les messages d'erreurs sont ils les mêmes ?
    Oui , toujours les mémes erreurs , aucune fonction n'est reconnue .
    BN_set_bit not found , BN_mod_inverse not found ,etc ....
    Toutes les foncions sont présentes dans la librarie .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2/ Ton projet final est en C ou  C++ ? (cela peut causer des soucis de décoration de noms de fonctions et ton linker peut ne pas les trouver)
    Le projet final est en C .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    3/ tu utilises windows car tu génère un .lib .
    Oui , pour l'import et exports des fonctions j'utilise import bn_lib
    export bn_lib le fichier bn_lib.c est présent dans le projet .





    C'est vraiment étrange vicenzo tout est trés bien configuré , toutes les fonctions sont prséntes dans la librarie est j'ai toujours des erreurs pour chaque fonction ajouté dans le code .
    Fichiers attachés Fichiers attachés
    • Type de fichier : c bn_lib.c (11,8 Ko, 110 affichages)
    • Type de fichier : h bn.h (13,1 Ko, 100 affichages)

  9. #9
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    poste le fichier lib plutôt....
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonsoir vicenzo,

    Le fichier de la librairie pése 3 MB impossible de le charger ici .
    as tu une idée d'ou ça provient ?

    Tout est parfaitement configuré et harmonieusement installé , je ne comprends vraiment comment que els focntions ne sont pas reconnues par le LINKER .

    C'est mon deuxiéme jour , ça fait 48 heures que j'essaie de trouver une solution
    Merci quand méme vicenzo .

  11. #11
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Fred.77 Voir le message
    Tout est parfaitement configuré et harmonieusement installé , je ne comprends vraiment comment que els focntions ne sont pas reconnues par le LINKER .
    Est-ce que tu précises explicitement le chemin de la bibliothèque à l'éditeur de lien (option -L sous certains compilateurs) ? Sinon, il ne risque pas de la trouver.
    Si tu fais cela et que tu as quand même des erreurs, quel est le message d'erreur complet ?

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonsoir DaZumba ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Est-ce que tu précises explicitement le chemin de la bibliothèque à l'éditeur de lien (option -L sous certains compilateurs) ?
    Oui, l'adresse et le chemin de la bibliothéque sont indiquées au Linker .
    Tout à fait , certains compilateurs utilise l'otpion -L {Chemin de la librairie}
    -L C:\Nom_Compilateur\lib .

    Mon compilateur utilise une autre option aussi -I .
    -I {cherche dans la racine du projet seulement }

    -I C:\Fred\lib .


    J'ai l'option dans le Linker Library search directory C:\Nom_Compilateur\lib

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Si tu fais cela et que tu as quand même des erreurs, quel est le message d'erreur complet ?

    A chaque fonction BN_ ajoutée y'a une erreur de type BN_mod_inverse not found .

    j'ajoute les 3 fonctions BN_set_word , BN_set_bit , BN_bn2bn .
    A la compile ça passe sans soucis puisque les fichiers d'en téte sont la .

    Par contre , au LINKAGE ....


    Linker error BN_set_word not found .
    Linker error BN_set_bit not found.
    Linker error BN_bn2bn not found .

    A chaque fonction BN_ajoutée le linker signale des erreurs .


    Merci quand méme pour ta disponibilité et ton conseil .

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben il n'y a que 2 solutions..

    • Ou bien la bibliothèque n'a pas été compilée, et il faut le faire
    • Ou bien le chemin n'est pas correct dans les paramètres du linker..



  14. #14
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Fred.77 Voir le message
    Oui, l'adresse et le chemin de la bibliothéque sont indiquées au Linker .
    Tout à fait , certains compilateurs utilise l'otpion -L {Chemin de la librairie}
    -L C:\Nom_Compilateur\lib .

    Mon compilateur utilise une autre option aussi -I .
    -I {cherche dans la racine du projet seulement }

    -I C:\Fred\lib .
    Tu n'indiques pas le nom de ton compilateur, mais es-tu sur de cette utilisation? Je m'attendrais plus a un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    -lfoo -L/path/to/lib
    pour lier avec la bibliotheque situee a /path/to/lib/libfoo.lib. C'est peut-etre different sur ton compilateur, mais c'est a confirmer.

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et -I est pour les fichiers d'entêtes....

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 80
    Par défaut
    Bonsoir à tous et à toutes ,


    Je viens juste de résoudre ce probléme de librairie de focntions , j'ai du compiler 23 fonctions , ensuite la génerer .
    Merci à souviron , DaZumba et vicenzo pour leurs conseils et leurs disponibilité et qui ont essayé de m'aider .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer une librairie dans un code c++
    Par wikers dans le forum Linux
    Réponses: 6
    Dernier message: 14/08/2009, 00h31
  2. Netbeans 6.1 Importer une librairie
    Par jeanluc dans le forum NetBeans
    Réponses: 15
    Dernier message: 26/11/2008, 00h50
  3. Comment importer une librairie avec le plugin CDT
    Par verbose dans le forum Eclipse C & C++
    Réponses: 9
    Dernier message: 25/09/2007, 11h47
  4. Existe-t-il une librairie de fonctions financières ?
    Par Vikisme dans le forum Langage
    Réponses: 1
    Dernier message: 05/07/2007, 11h50
  5. importer une librairie dans mon projet
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 25/04/2007, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo