Installer GTK+3 sous codeBlocks linuxMintDebian C++ [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
samedi 31 octobre 2015
Statut
Membre
Dernière intervention
15 novembre 2015
-
Messages postés
29505
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
-
Bonjour,
Je souhaite utilisé gtk+ 3 avec Code::Blocks 13.12 sous linux Mint Debian en C++.

En compilant j'obtiens le message d'erreur suivant:
gtk/gtk.h: Aucun fichier ou dossier de ce type.

J'ai déjà installé les paquets suivant :
libgtk-3-0
libgtk-3-bin
libgtk-3-common
libgtk-3-dev


Dans Code::Blocks>Settings>Compiler>Global Compiler Settings>Compiler Settings>Other Options j'ai saisi : `pkg-config --cflags gtk+-3.0`

Dans Code::Blocks>Settings>Compiler>Global Compiler Settings>Linker Settings>Other Linker Options j'ai saisi : `pkg-config --libs gtk+-3.0`

Quelqu'un serait il m'expliquer ce qu'il me manque à faire dans les paramétrages ?
Quelque chose avec le PATH sûrement mais je ne sais pas comment faire.

Merci







2 réponses

Messages postés
29505
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
7 012
Bonjour

1) Commence par utiiliser
apt-file
pour déterminer quel est le bon paquet :

sudo apt-get update
sudo apt-get install apt-file
apt-file update
apt-file search gtk-3 | grep "gtk/gtk.h"


Exemple :

(mando@velvet) (~) $ apt-file search gtk-3 | grep "gtk/gtk.h"
libgtk-3-dev: /usr/include/gtk-3.0/gtk/gtk.h
libgtk-3-dev: /usr/include/gtk-3.0/gtk/gtkcheckbutton.h
libgtk-3-dev: /usr/include/gtk-3.0/gtk/gtkcheckmenuitem.h
libgtk-3-dev: /usr/include/gtk-3.0/gtk/gtkshow.h


On voit ici que c'est le paquet
libgtk-3-dev


2) Installe le paquet correspondant :

apt-get install libgtk-3-dev


3) Passe au compilateur les options nécessaire pour trouver le headers. Par défaut il va chercher des headers dans
/usr/include
. Sans options il faudrait donc ici que tu inclues
#include <gtk-3.0/gtk/gtk.h>
.

Ce n'est évidemment pas super car ton code devient dépendant de la version de gtk-3, ce qui n'est évidemment pas souhaitable. Il faut donc bien faire l'inclusion comme tu l'as faite (
#include <gtk/gtk.h>
), mais tu dois du coup préciser au compilateur qu'il doit, en plus de
/usr/include
, chercher des headers dans
/usr/include/gtk-3.0
. Le numéro de version n'apparaîtra donc que dans ton makefile et sera facilement modifiable. Ceci se réalise avec l'option -I :

g++ -W -I/usr/include/gtk-3.0 fichier.cpp


Bonne chance
Bonjour Mamiemando,
merci pour ta réponse, tu m'avais déjà aidé pour une question précédente.

J'ai utilisé une méthode différente, trouver sur un site Anglophone,
dans le terminal, je tape:
LD_LIBRARY_PATH="/opt/gtk/lib"
PATH="/opt/gtk/bin:$/usr/include/gtk-3.0/gtk"
export LD_LIBRARY_PATH PATH


je n'ai pas de modifications supplémentaires à faire dans le code::blocks et je garde mon #include <gtk/gtk.h>
Je ne suis pas sur de ce que j'ai fait mais ça fonctionne.
Messages postés
29505
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
7 012
Étrange cette solution, ça voudrait dire que la variable PATH est utilisée pour trouver des headers. En théorie elle ne sert qu'à trouver des exécutables. Vu qu'à mon avis tu n'as rien dans /opt/gtk (à vérifier) je pense que certaines parties de cette solution sont inutiles.

Mais bon l'essentiel, c'est que ça marche comme tu veux :-)
>
Messages postés
29505
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021

Oui mais apparemment, LD_LIBRARY_PATH et PATH sont 2 choses distinctes.
"LD_LIBRARY_PATH définit où chercher les librairies dynamiques (en plus des chemins par défaut)".
Sinon effectivement je n'ai rien dans /opt/gtk ou peut être en fichier caché.
Messages postés
29505
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
7 012
Oui on est d'accord, c'est pourquoi ça me surprend que la solution que tu as proposé ait pu régler ton problème.

Ton problème initial était un problème d'include (donc pour trouver les .h et .hpp), or les variables d'environnement que tu as mentionnées servent à lister des répertoires où chercher des exécutables (rôle de PATH) et des librairies .so (rôle de LD_LIBRARY_PATH).