Skip to content
Snippets Groups Projects
Commit be0a4bda authored by CAPACES Nicolas's avatar CAPACES Nicolas
Browse files

changement complet du code: affichage -> base64

parent 678f4488
No related branches found
No related tags found
No related merge requests found
#compilatior
#je remarque que j'ai different résultat selon le symbole d'affectation
#si je met := gcc alors il utilise gcc comme compilateur
#si je met ?= gcc alors il utilise cc comme compilateur
CC := gcc CC := gcc
CFLAGS := -O3 -Wall -Wextra -Wpedantic
LFLAGS := -O3 -Wall -Wextra -Wpedantic -fPIC
#il n'est pas obligé d'utiliser ce chemin, car cela vas demander d'utiliser "sudo make" ce qui faudrait éviter pour voir ce que ça fait si on compile #flags
#---------------------
# les differents drapeaux que j'utilise pour la compilation
#---------------------
CFLAGS ?= -O3 -Wall -Wextra -Wpedantic
SOFLAGS ?= -g -fPIC
#flag vers la librarie personnelle
#MFLAG pour "Made Flag"
MFLAGS := -lbase64
#soucres
#----------------------
# ce qu'il faut complier
#----------------------
LSRCS := base64.c
#ceci nous donne : base64.o
LOBJS := $(LSRCS:.c=.o)
ISRCS := base64.h
SRCS := main.c
OBJS := $(SRCS:.c=.o)
#versions
#--------------------
# la version de la librairie
#-------------------
VMAJOR := 1
VMINOR := 0
VPATCH := 1
#chemins
#-----------------------
# les differents chemins utilisés dans le programme
#-----------------------
#je met la librairie dans un chemin reconnu par ldconfig #je met la librairie dans un chemin reconnu par ldconfig
#je peux voir ceci avec la commande suivante: <$sudo ldconfig -v> #je peux voir ceci avec la commande suivante: <$sudo ldconfig -v>
#je peux reseigner ce chemin à ld avec un fichier dans /etc/ld.so.conf.d/ #je peux reseigner ce chemin à ld avec un fichier dans /etc/ld.so.conf.d/
#en revanche il faudra utiliser sudo pour être utilisés
LPATH := /usr/local/lib/ LPATH := /usr/local/lib/
LSRCS := mars.c #je met le header dans un chemin que le preprocesseur peux reconnaitre avec les chevrons dans le code C
LOBJS := $(LSRCS:.c=.o) IPATH := /usr/local/include/
#le linker ne semble pas chercher libmars.so.1 mais que libmars.so
#il ne trouve pas avec le soname #targets
#je veux voir ceci avec la commande <$ld -lmars --verbose> LTARGETS := libbase64.so
#je ne sais pas si je peux faire en sorte que ld cherche des librairie avec des versions à la fin #ceci se casse dès qu'il y a plus d'une valeur dans LTARGET
#ça doit être possible, vu qu'il trouve /lib/x86_64-linux-gnu/libc.so.6, qui a une version à la fin LFULLTARGETS := $(LPATH)$(LTARGETS).$(VMAJOR).$(VMINOR).$(VPATCH)
#esc-ce que la libraire doit être un executable? TARGETS := out
LNAME := $(LPATH)libmars.so IFULLTARGETS := $(IPATH)$(ISRCS)
LSONAME := libmars.so.1
LVMAJOR := 1 #pour éviter à ce que make soit confu si je met un fichier nommé "all", "clean" ou "totalClean" dans ce repertoire
LVMINOR := 0 .PHONY: all clean totalClean
LVPATCH := 1
LTARGET := $(LNAME).$(LVMAJOR).$(LVMINOR).$(LVPATCH)
#les dependences sont executés de gauche à droite
TARGET := out #je ne sais pas si c'est l'implementation de make
SRCS := main.c #je ne trouve pas l'information dans la documantation
LIBS := -lmars #la documentation : https://www.gnu.org/software/make/manual/make.html
all: $(IFULLTARGETS) $(LFULLTARGETS) $(TARGETS)
#pour mettre les header dans un endroit standard que le préprocesseur peux trouver avec les chevrons @echo ---Compiling successful---
#donc je veux pouvoir faire ça: #include <mars.h>
IPATH := /usr/local/include/
INCLUDE := mars.h
#ceci va casser dès que je met plus d'un header, mais je ne sais pas comment renseigner le fait que je veux que tous les headers soient placé quelque part d'autre que le dossier courant
ITARGET := $(IPATH)$(INCLUDE)
#pour éviter que make soit confu si je met un fichier all et clean dans le répertoire
.PHONY: clean all
#je souhaite compiler la librairie avec un nom dans un endroit standard où le linker pourra le trouver automatiquement
$(LTARGET): $(LOBJS)
sudo $(CC) $(CFLAGS) -shared -Wl,-soname,$(LSONAME) -o $(LTARGET) $(LOBJS)
#pour generer un lien symbolique avec le soname
sudo ldconfig
#je souhaite compiler un binaire executable qui utilise la librairie
#J'aimerais ne pas avoir besoin à renseigner le -rpath dans le linker utilisé par gcc
$(TARGET): $(SRCS)
$(CC) $(CFLAGS) -o $(TARGET) $(SRCS) $(LIBS)
#Je veux mettre le header dans un endroit où on pourra utiliser les chevrons au lieu des guillemets pour l'inclure dans un projet
$(ITARGET): $(INCLUDE)
sudo cp $(INCLUDE) $(ITARGET)
#je compile tous les codes source en objet
.c.o:
$(CC) $(LFLAGS) -c $< -o $@
#je sais qu'il y a un ordre dans ceci:
#1 deplacer le header
#2 compiler la librarie
#3 compiler le programme
#Je vais devoir vérifier si nous pouvons renseigner l'ordre dans le but(goal) all
all: $(ITARGET) $(LTARGET) $(LNAME) $(TARGET)
@echo Successful compilation
clean: clean:
$(RM) *.o $(RM) *o
totalClean: clean
sudo $(RM) $(LFULLTARGETS) $(LPATH)$(LTARGETS) $(LPATH)$(LTARGETS).$(VMAJOR) $(IFULLTARGETS) $(TARGETS)
$(LFULLTARGETS): $(LOBJS)
sudo $(CC) $(CFLAGS) $(SOFLAGS) -shared -Wl,-soname,$(LTARGETS).$(VMAJOR) $^ -o $@
#ld ne cherche que le nom libbase64.so dans les dossiers de "linkage", il faut donc créer des liens symboliques vers la librarie
sudo ln -s $(LFULLTARGETS) $(LPATH)$(LTARGETS).$(VMAJOR) #on peux aussi faire : sudo ldconfig
sudo ln -s $(LPATH)$(LTARGETS).$(VMAJOR) $(LPATH)$(LTARGETS) #je ne connais pas de commande équvalente
#la compilation fonctionne
#le programme ne fonctionne pas
#même apres: gcc -o test main.c base64.c
#./test ne donne pas le résultat voulu
$(TARGETS): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@ $(MFLAGS)
#deplacement des headers
$(IFULLTARGETS): $(ISRCS)
sudo cp $^ $@
$(LOBJS): $(LSRCS)
$(CC) $(CFLAGS) $(SOFLAGS) -c $^ -o $@ -lc
$(OBJS): $(SRCS)
#$^ sont toutes les dépendances
#$@ sont toutes les cibles
$(CC) $(CFLAGS) -c $^ -o $@
/*****************************************
* Nom: main.c *
* Auteur: Nicolas CAPACES *
* Date de Creation: 19/05/2024 *
* Date de Modification: 20/05/2024 *
*****************************************/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <mars.h> #include <base64.h>
int main(void){ int main(void){
char* data ="waaa";
char* enc;
int verif;
verif = bin_to_base64(data, strlen(data), enc, base64_encoded_size(strlen(data)), URL);
//enc devrais être egal à "d2FhYQ=="
//mais il est egal à NULL
//verif confirme que la fonction à bien fonctionnée
//mais ne transfert pas le resultat
//même compilé de manière statique
printf("%d\n", verif);
printf("%s -> %s\n", data, enc);
free(enc);
return 0;
printf("%s\n", "Hello earth!");
printf("%s\n", mars());
return EXIT_SUCCESS;
} }
char* mars(void){
return "Hello Mars!";
}
#ifndef MARS_H_
#define MARS_H_
extern char* mars(void);
#endif /* mars.h */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment