[C] Utilisation bibliothèque personelle

Bibliothèque perso créee mais aucune idée de comment l'utiliser

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir à tous,

Je viens de démarrer la création d’une modeste bibliothèque (En fait il s’agit simplement du moteur d’un jeu style Space Invaders afin de mettre les bouts des pieds dans la création d’un moteur de jeu afin de progresser.)

J’ai donc crée la bibliothèque sans soucis, seulement je galère à l’utiliser. Ou peut-être ai-je un pépin au niveau de la conception.

Ce que je souhaiterai faire c’est l’utiliser comme l’on utilise la SDL2. On lie la bibliothèque à ses sources et on inclus dans ses fichiers sources un header principal (Comme SDL.h) qui lui se charge d’aller chercher le reste.

La bibliothèque compile mais à partir de là je suis bloqué. J’ai toujours eu l’habitude de lier les bibliothèques installées sur mon système mais pas une que j’ai pondue.

Je tiens à préciser que je tourne sous GNU/Linux (ELF, .a .so). Ma bibliothèque est une archive .a

Le makefile:

# IVE MAKEFILE
# Author: P4radoX
# Date: 01/04/2019

# CONFIGURATION

CMP = gcc
CMP_FLAGS = -ansi -Wall -Wextra -pedantic -O2
CMP_SDL2_FLAGS = $(shell sdl2-config --cflags)
LNK_SDL2_FLAGS = $(shell sdl2-config --libs)

OBJECTS = IVE.o IVE_Errors.o IVE_Init.o

# COMPILATION

libivelib.a: $(OBJECTS)
    ar rcs libivelib.a $(OBJECTS)

IVE.o: IVE.c
    $(CMP) -o IVE.o -c IVE.c $(CMP_FLAGS) $(CMP_SDL2_FLAGS) $(LNK_SDL2_FLAGS)

IVE_Errors.o: IVE_Errors.c
    $(CMP) -o IVE_Errors.o -c IVE_Errors.c $(CMP_FLAGS) $(CMP_SDL2_FLAGS) $(LNK_SDL2_FLAGS)

IVE_Init.o: IVE_Init.c
    $(CMP) -o IVE_Init.o -c IVE_Init.c $(CMP_FLAGS) $(CMP_SDL2_FLAGS) $(LNK_SDL2_FLAGS)

clean:
    rm -vrf *.o

mrproper: clean
    rm -vrf *.a

# END

J’ai tenté de la lier à un main.c bidon pour tester avec l’option -L mais le compilateur "m’insulte en allemand".

Merci d’avance ;)

Auteur du sujet

Salut @entwanne

Merci à toi.

En recopiant ton option de linkage ça fonctionne, je l’avais utilisée mais j’ai du taper avec les pieds tout à l’heure je pense :B

En effectuant un test rapide sur le retour d’une fonction de la bibliothèque, cela marche à merveille…

… ou presque, y’a un warning qui continue de traîner et j’aime pas les warnings :

warning: déclaration implicite de la fonction « IVE_Initialize » [-Wimplicit-function-declaration]

Cela est il dû au fait que je n’inclus aucun header dans le main.c qui sert de test même si la bibliothèque est liée statiquement ?

EDIT:

Voilà pourquoi je traque toujours le moindre "warning": Quand je souhaite passer directement une valeur d’une énumération à une de mes fonctions il me demande de déclarer d’abord l’énumération)

Édité par p4radox

Auteur du sujet

Donc si j’ai bien saisi, je dois aussi inclure mon header principal (Lui s’occupe d’inclure le reste) en indiquant l’emplacement des fichiers .h de la bibliothèque ?

En faisant cela, c’est au niveau de la SDL2 que ça coince en me balançant des références indéfinies. Pourtant j’ai bien lié la SDL2 dans la makefile de la bibliothèque ?

J’ai l’impression de jouer au Légos avec un aveugle là X/

Auteur du sujet

Bonjour,

Du coup le problème vient du fait que je cherchais à lier statiquement la SDL2 au moteur, ce qui est déprécié par la SDL2 elle même -> SDL2 Static linking

En liant dynamiquement la SDL2 au moteur je pense que ça devrait passer

Merci

EDIT: En passant cette chaîne de compilation, tout fonctionne mais je trouve ça un peu dommage :

gcc main.c -o main.x -ansi -Wall -Wextra -pedantic -O2 -IInvadeEngine -LInvadeEngine -livelib `sdl2-config --cflags --libs`

Édité par p4radox

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte