Langage c include<bib>

betyzak Messages postés 45 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
bsr je veux savoir comment réalisé un bibliothèque.h dans un projet C

merci d'avance !

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Pour inclure un header (et non une librairie), on fait tout simplement un #include :

    #include "chemin/relatif/vers/header.h"   
    #include "/chemin/absolu/vers/header.h"


    Si le header est dans un répertoire standard (par exemple /usr/include sous linux) ou référencer par les options de compilations (options -I ou -isystem avec gcc) on peut utiliser l'opérateur < > :

    // revient à #include "/usr/include/stdio.h"   
    #include <stdio.h>   
    
    // revient à #include "/usr/include/boost/cstdlib.hpp"   
    #include <boost/cstlib.hpp>


    Pour compiler avec une librairie les options diffère s'il s'agit d'une librairie statique ou dynamique. Sous linux, une librairie a un nom qui commence par "lib..."

    Une librairie statique (.a sous linux et .lib sous windows) se passe en paramètre à la dernière étape de compilation au moment du linkage :

    gcc -W -Wall -c fichier1.c -o fichier1.o   
    gcc -W -Wall -c fichier2.c -o fichier2.o   
    gcc -W -Wall -c fichier3.c -o fichier3.o   
    gcc -W -Wall main.c fichier1.o fichier2.o fichier3.o libplop.a


    Pour une librairie dynamique (.so sous linux et .dll sous windows), il faut utiliser l'option -l. Si par exemple on veut linker avec libplop.so :

    gcc -W -Wall -c fichier1.c -o fichier1.o   
    gcc -W -Wall -c fichier2.c -o fichier2.o   
    gcc -W -Wall -c fichier3.c -o fichier3.o   
    gcc -W -Wall main.c fichier1.o fichier2.o fichier3.o -lplop


    (note que le préfixe "lib..." a disparu et que l'extension .so n'apparaît pas). Le compilateur cherche le .so dans les répertoires standards (/lib, /usr/lib, /usr/local/lib) mais si la librairie est à un autre endroit il faut référencer son répertoire :
    - avec l'option -L pour une librairie statique
    - avec l'option -Wl,R pour une librairie dynamique

    Une compilation est assez fastidieuse comme tu peux le constater. C'est pourquoi on met en place généralement un makefile qui permet de facilement compiler le projet tout en s'affranchissant de l'IDE utilisé (visual studio, kdevelop, anjuta... ou aucun !).

    Voici par exemple à quoi ça ressemble (makefile écrit à l'arrache et loin d'être parfait) :

    # Variables   
    CC        = gcc   
    CFLAGS    = -W -Wall   
    EXE       = plop   
    OBJS      = fichier1.o \   
                fichier2.o \   
                fichier3.o   
    
    # Compile tout   
    all: main.c $(OBJS)   
        @echo "Linking"   
        $(CC) $(CFLAGS) main.c $(OBJS) -o $(EXE)   
    
    # Nettoie les fichiers intermédiaires   
    clean:   
        rm -f *.o   
    
    # Compile un module   
    %.o: %.c   
        @echo "Compiling $@"   
        $(CC) $(CFLAGS) -c $< -o $@   
    


    Remarque sur les makefile : chaque instruction (en italique) DOIT être précédé du caractère tabulation (et non d'espace).

    Bonne chance
    1