Langage c include<bib>

Fermé
betyzak Messages postés 40 Date d'inscription dimanche 5 décembre 2010 Statut Membre Dernière intervention 6 janvier 2011 - 4 janv. 2011 à 20:45
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 4 janv. 2011 à 21:34
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié par mamiemando le 4/01/2011 à 21:35
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