Langage c include<bib>

betyzak Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 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 !
A voir également:

1 réponse

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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