Installer la miniLibX
La miniLibX (ou mlx pour les intimes) est la librairie utilisée à Epitech et 42 pour les projets d’infographie: fil de fer, raytracer, …
Ses caractéristiques principales sont l’aspect très simple des fonctions disponibles: ouvrir une fenêtre, afficher un pixel à l’écran, enregistrer un appel de touche (clavier ou souris). C’est une librairie basée sur l’environnement graphique X.org. Cet article est principalement là pour regrouper des ressources utiles sur la miniLibX, sur ses manuels et fichier associés. Les sources sont également fournies pour vous permettre de les installer chez vous et de faire tourner vos projets sur vos ordis persos.
Les fichiers de la miniLibX
- Archive des sources:
- minilibX originale de 2014 mlx-2014-01-06.tgz
- minilibX version native MacOS X (< El Capitan) mlx-macosx-2015-03-10.tgz
- minilibX pour MacOS X El Capitan mlx-macosx-el-capitan-2015-11-05.tgz
- minilibX pour MacOS X Sierra mlx-macosx-sierra-2016-10-17.tgz
- Toutes les fonctions et la documentation se trouve dans la version PDF des manuels (attention, la version native Mac OSX possède certaines différences, je vous invite à lire les headers):
Installation avec XQuartz
Voici un tutoriel pour installer la miniLibX (sur un MacOS X ou tout autre distribution proche). Si vous voulez vous économiser du temps, il existe un package pour MacOS X qui vous fera ça automatiquement: minilibx.pkg (créé par Mehdi Laouichi). Attention, il semblerait que cela ne fonctionne pas très bien voir plus du tout sur les dernières versions de MacOS X (> El Capitan). Je vous conseille de prendre les versions natives MacOS X pour vos projets.
Avant de commencer, n’oubliez pas d’installer le serveur X.org si vous ne l’avez pas déjà. Sous MacOS X, le plus simple est d’installer XQuartz (miroir de XQuartz 2.7.11)
Il va nous falloir compiler la miniLibX puis copier les fichiers générés dans divers dossiers du système.
achedeuzot@~ $ wget http://files.achedeuzot.me/42/mlx/mlx-2014-01-06.tgz achedeuzot@~ $ tar -xzf mlx-2014-01-06.tgz achedeuzot@~ $ cd minilibx achedeuzot@~/minilibx $ make achedeuzot@~/minilibx $ cd test achedeuzot@~/minilibx/test $ ./mlx-test # Vous permet de savoir si la compilation de la lib a réussi achedeuzot@~/minilibx/test $ cd ..
Maintenant que la miniLibX est compilée et testée, nous allons l’installer sur le système, c’est à dire copier les fichiers vers des dossiers qui sont accessibles pour tout le monde.
achedeuzot@~/minilibx $ sudo cp mlx.h /usr/X11/include achedeuzot@~/minilibx $ sudo cp libmlx.a /usr/X11/lib achedeuzot@~/minilibx $ sudo cp libmlx_intel-mac.a /usr/X11/lib
Pour finir, et voir si votre installation a fonctionné, utilisez l’exemple ci-dessous. N’oubliez pas de supprimer les fichiers générés par l’archive mlx, sauf si vous voulez mettre les mains dans le cambouis et voir comment ça marche.
Installation native Mac OSX
Quasiment similaire à l’installation avec XQuartz. Prenez la version compatible avec votre version de MacOS X (voir début de l’article). Voici les instructions pour MacOS X Sierra:
achedeuzot@~ $ wget http://files.achedeuzot.me/42/mlx/mlx-macosx-sierra-2016-10-17.tgz achedeuzot@~ $ tar -xzf mlx-macosx-sierra-2016-10-17.tgz achedeuzot@~ $ cd minilibx_macos achedeuzot@~/minilibx_macos $ make achedeuzot@~/minilibx_macos $ sudo cp mlx.h /usr/X11/include achedeuzot@~/minilibx_macos $ sudo cp libmlx.a /usr/X11/lib
Même chose ici, vous pouvez maintenant tester si votre installation a fonctionné avec l’exemple ci-dessous. Attention, cette version de la mlx a quelques comportements différents à la version XQuartz. Vous pouvez ensuite supprimer le dossier et l’archive de la minilibX.
Exemples
Hello World
Comme d’habitude, le fameux Hello World (cf titre de la fenêtre) pour commencer:
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <mlx.h> typedef struct data_s { void *mlx_ptr; void *mlx_win; } data_t; int main(void) { data_t data; if ((data.mlx_ptr = mlx_init()) == NULL) return (EXIT_FAILURE); if ((data.mlx_win = mlx_new_window(data.mlx_ptr, 640, 480, "Hello world")) == NULL) return (EXIT_FAILURE); mlx_loop(data.mlx_ptr); return (EXIT_SUCCESS); }
Attention, pour la compilation, il ya deux cas.
- Soit vous utilisez les « vieilles » versions utilisant X11 et il faut lancer ceci (attention à ne pas oublier les flags et attention à leur ordre):
achedeuzot@~ $ gcc -I /usr/X11/include -g -L /usr/X11/lib -lX11 -lmlx -lXext <fichier(s) .c> achedeuzot@~ $ ./a.out
- Soit vous utilisez les nouvelles lib natives MacOS X et il faut ajouter les flags
-framework OpenGL -framework AppKit
en plus. Vous remarquerez que même si cette libraire n’utilise plus X.org/X11, j’utilise toujours les chemins vers X11. C’est parce que lors de l’installation, nous avons copié la libmlx dans les dossiers X11 (souvenez-vous dessudo cp ... /usr/X11/...
). Il faut donc ajouter les chemins de X11 pour la compilation. Si votre libmlx est ailleurs, pas besoin d’ajouter les chemins d’include vers X11.:
achedeuzot@~ $ gcc -I /usr/X11/include -g -L /usr/X11/lib -l mlx -framework OpenGL -framework AppKit <fichier(s) .c> achedeuzot@~ $ ./a.out
Dans les deux cas, vous verrez ceci:
Tadam ! Il ne reste plus qu’à réaliser votre projet mlx et en mettre plein de yeux à ceux qui testeront votre logiciel 😀
Quelques petits pièges à éviter
Si le sujet ne précise pas la possibilité d’utiliser la fonction système exit()
, c’est une erreur de sujet. En effet, il est impossible de quitter « proprement » la miniLibX, il faut forcément faire un exit()
ou quitter sauvagement via le bouton « Fermer » de la fenêtre. D’anciennes légendes parlent d’une fonction mlx_loop_stop()
mais elle n’est pas présente dans les sources fournies ici.
Lorsque vous initialisez la mlx, avec mlx_init()
, attention aux environnements shell vides, c’est à dire, n’oubliez pas de protéger votre mlx_init()
car si votre appel de fonction n’est pas correctement protégé, vous aurez un joli plantage en règle, allez tout droit en prison, sans passer par la case départ, ne touchez pas 20 000€. La commande pour tester cela vous même: $ env -i <votre-executable>
S’il plante, c’est que vous ne l’avez pas bien protégé 😉
Si vous avez utilisé un paquet Debian ou une autre méthode d’installation, il est possible de devoir rajouter un dossier d’include pour la compilation: -I /opt/X11/include/X11
Bon code à tous !
Commentaires
11 commentaires
J’ai suivi l’ « Installation native Mac OSX » mais arrivé a la dernière étape, je me suis rendu compte que le fichier libmlx_intel-mac.a n’existe pas.
J’ai quand même essayé de faire le test mais j’ai eu le droit à une longue liste d’erreurs :
et ça continue pendant un bon moment.
Merci pour toute aide que vous pourriez me fournir.
Bonjour Jérémie,
En effet, je n’avais pas correctement testé avec la dernière version. Quelques changements dans l’article et c’est bon:
libmlx_intel-mac.a
-framework OpenGL -framework AppKit
Avec les flags en plus, ça passe nickel 🙂 J’espère que ce sera aussi le cas pour toi !
Salut, je suis sous MacOs Sierra et impossible d’installer la mlx.
L’installation par le .pckg n’a pas fonctionné.
J’ai testé la solution avec le fichier mlx-2014-01-06.tgz mais quand je lance l’executable ./mlx-test après avoir « make » j’ai ce message d’erreur :
Pendant le « make » j’ai plusieurs warning aussi.
Merci d’avance !
Salut Natan !
Alors effectivement, si je prends la version de 2014, j’ai les mêmes erreurs que toi !
J’ai mis à jour l’article pour utiliser les nouvelles versions pour macOS Sierra. Attention aux flags de compilation supplémentaires
-framework OpenGL -framework AppKit
pour les versions natives de la mlx. Aussi, il n’y a pas d’executable de test sur les versions natives, le plus simple est de compiler le petit programme Hello World d’exemple et de le lancer.Bonne chance !
Parfait ça a fonctionné ;). Merci !
Salut, je suis sous MacOS El Capitan, j’ai téléchargé la minilibx etc depuis les dumps de l’école sur le projet FdF et quand je fais make je me retrouve avec une tonne d’erreurs type return of non void function ou encore des appels implicites, dois-je corriger les erreurs à la main ou bien est-il possible que quelque chose ait mal été fait de mon côté ?
Salut « Ch » !
En effet, il semblerait que tu aies raté quelque chose: soit la version de la minilibx que tu as récupérée n’est pas la bonne pour la version El Capitan (cf article), soit tes flags de compilation de ton projet manquent de
-framework OpenGL -framework AppKit
comme précisé plus bas. En tout cas, j’ai re-testé chez moi et je n’ai eu aucun souci à l’installer (hormis quelques petits warnings).Bonne chance !
Bonjour, j’ai rencontré quelque problème pour cette installation. Je suis sur Windows et j’aurais voulu utiliser cette bibliothèque sur « codeblocks » mais après avoir télécharger le fichier « mlx-2014-01-06.tgz » je n’ai pas su comment continuer mon installation… Pourriez vous m’expliquer comment finir mon installation s’il vous plait?
Bonjour Zoc,
Je ne sais pas si la minilibx peut fonctionner sous Windows. Dans tout les cas, cela risque de demander pas mal de bidouillage étant donné qu’elle est prévue pour l’environnement X.org et depuis ses dernières versions pour le système d’affichage d’Apple. Rien n’a été fait dans le sens de la compatibilité Windows.
Bonne chance et si tu y arrives, hésites pas à m’écrire pour que j’ajoute la procédure pour les autres lecteurs.
Klemen
Salut,
J’effectue les consignes comme indiquées via l’installation Sierra. Cependant au moment de la compilation j’ai cette erreur :
ld: warning: -L path ‘/usr/X11/lib’ is not a directory
ld: library not found for -lmlx
Merci !
Salut,
L’erreur t’indique que ton compilateur ne trouve pas le fichier `libmlx.a` dans le chemin fourni `/usr/X11/lib` qui n’est pas un dossier.
Il va falloir vérifier que la libraire existe et qu’elle est au bon endroit dans ton arborescence 🙂
Klemen
Laisser un commentaire