Création de librairie perso en C ?

Fermé
daleny31 Messages postés 222 Date d'inscription samedi 25 octobre 2008 Statut Membre Dernière intervention 7 janvier 2015 - 1 déc. 2010 à 20:26
daleny31 Messages postés 222 Date d'inscription samedi 25 octobre 2008 Statut Membre Dernière intervention 7 janvier 2015 - 10 déc. 2010 à 12:55
Salut a tous !

Bin je gakere depuis un petit moment en allant de forum en forum, et je n'ai plus trop le temps de chercher. Alors je viens vous poser la question.

Comment je peux creer ma librairie .h ?

En fait, dans mon main.c j'ai beaucoup de fonctions et j'aimerais les rassembler.
J'aurais au final dans mon dossier courant: main.c libperso.h

Mais je ne pige rien, j'ai lu qu'il fallait faire un fichier libperso.c et un autre .h........

Merci.
A voir également:

7 réponses

Nic0- Messages postés 341 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 16 février 2011 44
2 déc. 2010 à 03:05
Salut

Par exemple t'as un fichier socket.c et socket.h (en plus du main, mais c'est qu'un exemple)

dans le socket.c tu fais un include du .h

#include "socket.h"

int initSocket (int *sock, struct sockaddr_in *sockname,
                struct hostent *host_address, config_t *config) {
...
...
}
int initSocketConnect (int *sock, config_t *config) {
...
...
}


et dans le fichier socket.h, tu mets les prototypes de tes fonction :
#ifndef SOCKET_H_INCLUDED
#define SOCKET_H_INCLUDED

int initSocket (int *sock, struct sockaddr_in *sockname,
                struct hostent *host_address, config_t *config);
int initSocketConnect (int *sock, config_t *config);

#endif

Mais c'est qu'un exemple hein, les #ifndef c'est pour être sûr que tu n'inclus les ficihes qu'une seule fois

Tes fonctions sont appelable d'un autre fichier si tu en fait l'include (par exemple du main.c)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 déc. 2010 à 08:46
Bonjour,

Le .h n'est pas une bibliothèque (librairie) mais le fichier d'en-tête. Ce n'est pas pareil. La bibliothèque est un fichier qui contient le code des fonctions tandis que le .h contient juste les prototypes.
Ensuite, il existe deux types de bibliothèques : les statiques, les dynamiques.
Tu souhaites faire une bibliothèque statique (plus simple à réaliser, mais le programme sera plus lourd) ou une bibliothèque dynamique (plus compliqué mais le programme sera plus léger (par contre la DLL devra être livré avec le programme)) ?
As-tu vraiment besoin de faire une bibliothèque ? Sinon tu peux tout simplement, mettre tes fonctions dans un autre fichier .c.

Merci de répondre à ces questions pour qu'on puisse t'aider plus précisément.

Cordialement,
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
2 déc. 2010 à 09:39
Pour faire suite à ce que dit Nic0, une fois que tu as mis tes fonctions dans un autre .c et mis toutes les déclarations dans un .h, il faut compiler. La compilation de plusieurs fichiers sources diffère un peu de la compilation d'un seul.
les .h ne se compilent pas, ce sont juste des déclarations qui seront automatiquement copier dans le fichier source au moment de la compilation. Il faut donc compiler les deux fichiers sources séparément en indiquant au compilateur de ne pas faire l'édition des liens (option -c avec gcc).
Tu as alors deux fichiers .o : main.o et autre.o.
Tes fonctions sont dans autre.o mais ton programme principale dans main.o, main.o ne connais pas la définition des fonctions qu'il utilise. Il faut alors lié les .o ensemble pour obtenir un exécutable.

Ensuite, à partir de autre.o, tu peux faire une bibliothèque statique te permettant d'utiliser facilement tes fonctions dans un autre programme.
0
dharth Messages postés 140 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 23 août 2012 13
2 déc. 2010 à 12:01
sous unix :
- gcc -c fichier1.c fichier2.c (si tu veux faire une lib avec tout les fichier du répertoire courant : gcc -c *.c)
!! pas de fonction main() dans une lib!!

- ar rc nomlib.a *.o

- ranlib nomlib.a

ensuite pour compiler un programme avec cette lib :

- gcc main.c -L. -lnomlib (l'option -L définit le chemin, ici . pour le répertoire courant, attention le chemin doit être collé au -L; l'option -l correspond au nom de la lib, attention pas mettre le .a a la fin du nom et le nom doit être collé au -l)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nic0- Messages postés 341 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 16 février 2011 44
2 déc. 2010 à 12:05
Vous pensez vraiment qu'il souhaite faire une bibliothèque ? alors qu'il sait pas ce qu'un header ? :)

allons ! keep it simple, ne l'embrouillons pas (imho)
0
dharth Messages postés 140 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 23 août 2012 13
2 déc. 2010 à 12:17
en effet j'avais pas vu .h ^^
et bien c'est très simple, dans le fichier .c tu fait include "fichier.h"
et dans le .h tu met les prototypes de fonctions, les defines, les structures...
Pour la mise en forme c'est comme l'a dit Nic0-
0
dharth Messages postés 140 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 23 août 2012 13
2 déc. 2010 à 12:18
petite précision importante, pour les includes, il faut bien mettre des "" pour le nom du fichier et non pas des <> qui sont réservé aux includes système!!
0
daleny31 Messages postés 222 Date d'inscription samedi 25 octobre 2008 Statut Membre Dernière intervention 7 janvier 2015 8
10 déc. 2010 à 12:55
Non c'est parfait, le probleme c'était les #ifndef...

MErci beaucoup...
0