Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/10/2011, à 19:48

Crone123

Emplacement de Qt4

Bonjour,
CodeBlocks me demande l'emplacement de Qt4.
Problème, j'ai recherché Qt4 dans nautilus, et il n'accepte aucun dossier correspondant a la recherche.
J'ai installé Qt4 avec les paquets des dépôts, et je ne trouve pas le dossier (comme avec 98% des paquets en fait) ou il a été installé.
Voilà, pourriez vous me re-confirmer quel paquet installer, et ou se trouver son dossier d'installation sur Ubuntu 11.04 64Bits.
Si vous savez aussi ce qu'il faut rajouter a un projet codeblocks SFML dans les options de compilation pour qu'il accepte d'utiliser Qt ça m'arrange smile
Merci smile

Hors ligne

#2 Le 07/10/2011, à 00:03

Haleth

Re : Emplacement de Qt4

aptitude install libqt4 && updatedb
path=`locate libgt4 | grep deb | head -1`
dpkg-deb -c $path

Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 07/10/2011, à 18:07

Crone123

Re : Emplacement de Qt4

E: Impossible de trouver le paquet libqt4

Hors ligne

#4 Le 07/10/2011, à 21:24

Teofifil

Re : Emplacement de Qt4

Bonsoir,

Une autre solution est d'oublier codeblock compte tenu des nombreux problèmes de paramétrage et d'opter tout simplement pour Qt Creator.

Hors ligne

#5 Le 07/10/2011, à 23:07

Crone123

Re : Emplacement de Qt4

En fait j'avais besoin de Qt pour rajouter des interfaces au jeu, pour le même usage, mais en mieux (puisque ça n'ouvre pas d'autres fenêtres) y a CEGUI, mais pour les 2 j'arrive pas a les faire trouver par le compilateur sad (gcc)
Comment fait-on pour indiquer l'emplacement des bibliothèques au compilateur?
Merci smile

Hors ligne

#6 Le 07/10/2011, à 23:27

Haleth

Re : Emplacement de Qt4

Par exemple, pour link la lib pthread :

gcc -o output file.c -lpthread

Dans tout les cas, man gcc est ton ami (& codeblock le démon !)


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#7 Le 08/10/2011, à 01:04

Crone123

Re : Emplacement de Qt4

Oui, mais je compile pas en console, c'est CodeBlocks qui compile avec gcc pour moi, j'utilise l'IDE, si il est là c'est pas pour rien non plus wink
Et je suis toujours en train de débuter, et compiler directement en console je ne sais pas le faire....
Ce que je veux, c'est savoir comment les utiliser tout en utilisant CodeBlocks, pour éviter de rester dans la situation du "y a des super bibliothèques pour faire ce que j'ai besoin, mais comme je n'arrive pas a l'inclure je ne peux pas m'en servir"....
Voilà, Merci smile

Hors ligne

#8 Le 08/10/2011, à 01:06

Haleth

Re : Emplacement de Qt4

Si tu débute, raison de plus pour apprendre la bonne méthode, et non la mauvaise :
gcc, makefile, autoconf & co


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#9 Le 08/10/2011, à 01:15

Crone123

Re : Emplacement de Qt4

Oui, mais IDE ou pas, j'ai besoin de savoir (et surtout de comprendre) comment ça marche.... wink

Hors ligne

#10 Le 08/10/2011, à 08:33

omc

Re : Emplacement de Qt4

Bonjour Crone,
Si tu débutes je comprend que tu veuilles un IDE.
Notamment parce-que celui-ci te mâche le travail pour toutes les étapes de compilation.

Mais ce n'est pas une bonne idée, si tu souhaites vraiment comprendre ce qu'il se passe,
je te conseille de faire une série de petits programmes où tu compiles "à la main" dans un terminal.
Tu auras une meilleure compréhension.
Après, tu verras que configurer la compil' d'un IDE sera simple.

En plus, code::blocks, ce n'est vraiment pas une bonne idée, je te conseille plutôt kdevelop, geany, ou qtcreator.
Enfin bref, bon courage !

Hors ligne

#11 Le 08/10/2011, à 11:15

Crone123

Re : Emplacement de Qt4

OK, je veux bien essayer a la main, mais pouvez-vous m'expliquer comment on fait ça?
Merci smile

Hors ligne

#12 Le 08/10/2011, à 12:07

omc

Re : Emplacement de Qt4

Tout d'abord il faut connaître quelques conventions de bases pour exécuter un programme en ligne de commande.
La majorité des programmes autorisent des options d'exécution.

Pour les activer il y a deux façons :
  - utiliser le nom complet de l'option avec "--" : "--option".
  - utiliser un raccourci avec "-" : "-opt"
Cela donne :

$ unProgramme --option 
ou
$ unProgramme -opt

Il faut savoir que certaines options acceptent des arguments, par exemple :

$ unProgramme --option argument
ou
$ unProgramme -opt argument

Pour g++ c'est pareil. Attention gcc est le compilateur du C et g++ est le compilateur du C++.
Leurs utilisations sont très similaires.
Pour accéder au manuel de g++, il faut invoquer le manuel avec la commande :

$ man g++

Prenons par exemple le programme C++ "Hello.cpp" :

#include<iostream>
int main()
{
    std::cout << "Hello world !" << '\n';
}

Pour compiler c'est simple. On se place généralement dans le répertoire des sources
pour éviter d'écrire le path complet des fichiers :

$ cd ~/mes-sources-c++
$ g++ Hello.cpp

Là c'est la version ultra-minimaliste. Par défaut, g++ crée un fichier exécutable nommé "a.out".
Pour l'exécuter :

$ ./a.out
Hello world !
$

Pour faire un peu mieux :
  - il est possible d'indiquer un fichier de sortie avec l'option '-o',
  - et d'activer tous les messages d'alertes des anomalies détectées par g++ (warning) avec l'option "-Wall".

Cela donne :

$ g++ -Wall Hello.cpp -o Hello
$ ./Hello
Hello world !
$

Voila pour une version encore ultra-simple. Mais la compilation de vrais programmes demande un peu plus de travail.
La suite plus tard si j'ai le temps.

Dernière modification par omc (Le 08/10/2011, à 12:08)

Hors ligne

#13 Le 08/10/2011, à 20:40

Crone123

Re : Emplacement de Qt4

Et si j'ai plusieurs fichiers, par exemple, je met uniquement main.cpp, ou bien je met aussi tous les .h et .cpp du dossier en paramètres?
(Déjà c'est plus clair, parce que j’essayais de compiler un projet C++ avec gcc, c'est pour ça que marchait pas...)
Et donc, il doit y avoir une option pour lui indiquer les bibliothèque a inclure, ou le chemin de ces bibliothèques (on retrouve toujours le problème suivant: Je ne connais pas l'emplacement des bibliothèques ....)
Merci beaucoup pour ces explications, ça m'aide déjà a bien comprendre "la base" de la compilation en ligne de commande smile
Si tu as un peu de temps pour m'expliquer la suite ça serait vraiment très sympa de ta part smile
Merci d'avance smile

Hors ligne

#14 Le 08/10/2011, à 21:03

Haleth

Re : Emplacement de Qt4

Pour plusieur fichier, on fait comme ca :

gcc -c fichier1.c fichier1.o
gcc -c fichier2.c fichier2.o
...
gcc -o binaire fichier1.o fichier2.o

En gros, tu compile chaque fichier séparement, puis tu les lie pour faire le binaire

De meme, pour utiliser une lib, t'as pas besoin de savoir où elle est.
Par exemple, pour utiliser la sfml :

g++ -o clock clock.o -lsfml-system

(note le -l, suivit d'un nom : la lib)

Ca fait beaucoup de ligne, mais en fait pas du tout, tu les met toute dans un fichier Makefile (y'a plein d'option, mais on va faire simple) :

$cat Makefile
fichier1.o: fichier1.c fichier1.h
   gcc -o fichier1.o -c fichier1.c

fichier2.o: fichier2.c fichier2.h
   gcc -o fichier2.o -c fichier2.c

binaire: fichier1.o fichier2.o
   gcc -o binaire fichier1.o fichier2.o

Chaque zone correspond à 1 fichier : le nom du fichier, les dépendances (fichiers requit pour le créer), et la commande
Puis, pour compiler l'ensemble, un simple make suffit :

make

L'avantage de faire plusieurs fichiers : tu n'as pas besoin de recompiler l'ensemble après chaque modification, juste ceux qui a changé


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#15 Le 08/10/2011, à 21:48

Crone123

Re : Emplacement de Qt4

OK, ça aussi j'ai compris, mais pour Qt par exemple, je dois mettre quoi a la place de -lsfml-system,, pareil, si je veux utiliser CEGUI, SPARK (moteur de particule pour la SFML) ou d'autres, si je ne les ai pas eut avec des paquets, comment le compilateur fait-il pour les trouver?
Merci smile

Hors ligne

#16 Le 08/10/2011, à 23:18

Haleth

Re : Emplacement de Qt4

J'ai trouvé !

ldconfig -p

Utilise grep pour recuperer la ligne qu'il faut


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#17 Le 09/10/2011, à 08:51

omc

Re : Emplacement de Qt4

Salut,
Pour des programmes qui dépendent de librairies il faut généralement indiquer au compilo :
- Le path des fichiers headers que tu inclus avec la directive '#include ...' dans tes sources : option '-I'.
- Le path des bibliothèques dynamiques (xxxx.so) avec lesquels tu souhaites te linker : option '-L'.
- Les bibliothèques dynamiques avec lesquels tu te link : option '-l'.

C'est là qu'il faut comprendre un peu comment fonctionne une machine GNU/Linux.
Déjà tu as sans doute remarqué que pour inclure un header, il faut faire
- ' #include <...> ' ou
- ' #include "..." '
En fait, les chevrons  '<...>' indiquent au compilo que le fichier header se trouvent dans le répertoire
système. Celui-ci peut être '/usr/include', etc.
Pour les binaires(.so et .a) c'est pareil. Ils se trouvent dans '/usr/lib', '/usr/lib32',  '/usr/lib64', etc.

D'un point de vue pratique, si une bibliothèque est installée de façon standard (c'est le cas de la plupart des bibliothèques installée avec le gestionnaire de paquet) tu n'as pas besoin d'indiquer au compilo le path pour trouver la bibliothèque

Pour qt avec l'installation standard, les headers se trouvent dans :

$ cd /usr/include/qt4/
$ ls
Qt  Qt3Support  QtCore  QtDBus  QtDeclarative  QtDesigner  QtGui  QtHelp  QtNetwork  QtOpenGL  QtScript  QtScriptTools  QtSql  QtSvg  QtTest  QtUiTools  QtWebKit  QtXml  QtXmlPatterns
$ 

Et les .so sont dans '/usr/lib'

$ cd /usr/lib/
$ ls *Qt*.so*
libCGAL_Qt4.so                 libQtCLucene.so        libQtDBus.so.4.7                  libQtDesigner.so        libQtHelp.so.4.7       libQtScript.so             libQtSql.so.4.7     libQtWebKit.so             libQtXml.so.4.7
libCGAL_Qt4.so.5               libQtCLucene.so.4      libQtDBus.so.4.7.2                libQtDesigner.so.4      libQtHelp.so.4.7.2     libQtScript.so.4           libQtSql.so.4.7.2   libQtWebKit.so.4           libQtXml.so.4.7.2
libCGAL_Qt4.so.5.0.1           libQtCLucene.so.4.7    libQtDeclarative.so               libQtDesigner.so.4.7    libQtNetwork.so        libQtScript.so.4.7         libQtSvg.so         libQtWebKit.so.4.7         libSoQt4.so.20
libQt3Support.so               libQtCLucene.so.4.7.2  libQtDeclarative.so.4             libQtDesigner.so.4.7.2  libQtNetwork.so.4      libQtScript.so.4.7.2       libQtSvg.so.4       libQtWebKit.so.4.7.2       libSoQt4.so.20.4.2
libQt3Support.so.4             libQtCore.so           libQtDeclarative.so.4.7           libQtGui.so             libQtNetwork.so.4.7    libQtScriptTools.so        libQtSvg.so.4.7     libQtXmlPatterns.so        libSoQt.so.20
libQt3Support.so.4.7           libQtCore.so.4         libQtDeclarative.so.4.7.2         libQtGui.so.4           libQtNetwork.so.4.7.2  libQtScriptTools.so.4      libQtSvg.so.4.7.2   libQtXmlPatterns.so.4
libQt3Support.so.4.7.2         libQtCore.so.4.7       libQtDesignerComponents.so        libQtGui.so.4.7         libQtOpenGL.so         libQtScriptTools.so.4.7    libQtTest.so        libQtXmlPatterns.so.4.7
libQtAssistantClient.so.4      libQtCore.so.4.7.2     libQtDesignerComponents.so.4      libQtGui.so.4.7.2       libQtOpenGL.so.4       libQtScriptTools.so.4.7.2  libQtTest.so.4      libQtXmlPatterns.so.4.7.2
libQtAssistantClient.so.4.7    libQtDBus.so           libQtDesignerComponents.so.4.7    libQtHelp.so            libQtOpenGL.so.4.7     libQtSql.so                libQtTest.so.4.7    libQtXml.so
libQtAssistantClient.so.4.7.2  libQtDBus.so.4         libQtDesignerComponents.so.4.7.2  libQtHelp.so.4          libQtOpenGL.so.4.7.2   libQtSql.so.4              libQtTest.so.4.7.2  libQtXml.so.4
$ 

Du coup pour faire un programme qt 'hello.cpp'

#include <QApplication>
#include <QPushButton>

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QPushButton hello("Hello world!");
     hello.resize(100, 30);

     hello.show();
     return app.exec();
 }

Il faut compiler avec :

$ g++ hello.cpp -o hello -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtCore -I/usr/include/qt4 -lQtGui -lQtCore


Bon pour des programmes un peu plus complexes, il faut utiliser le système de makefile de qt : 'qmake'.
La suite plus tard (si j'ai le temps).

Hors ligne

#18 Le 09/10/2011, à 09:11

omc

Re : Emplacement de Qt4

Pour des programmes qt, il faut généralement passer par les makefile qt car qt utilise un pré-processeur 'moc'.
Ça évite une gestion à la main des fichiers 'moc'.

Comment ça marche ?
Il faut créer un fichier xxx.pro où sont indiqués les sources, les headers, les dépendances, les fichiers d'interfaces graphiques (xxxx.ui), les moc, etc.

Il faut invoquer ensuite la commande 'qmake-qt4' qui va permettre de générer un fichier Makefile qui permettra ensuite de compiler tout ce petit monde avec la commande 'make'.

Avec l'exemple 'hello.cpp':

#include <QApplication>
#include <QPushButton>

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QPushButton hello("Hello world!");
     hello.resize(100, 30);

     hello.show();
     return app.exec();
 }

Il faut faire un fichier hello.pro

TEMPLATE = app
DESTDIR = ./

# Les libs en plus de qt 
# LIBS += 

# Le path des headers (hormis) qt
# INCLUDEPATH += 

# Les headers du projet 
# HEADERS +=

# Les interfaces graphiques (xxx.ui)
# FORMS += 

# Les fichiers resources (xxx.qrc)
# RESOURCES = 

#etc.

SOURCES += hello.cpp

Pour construire le projet:

$ ls
hello.cpp hello.pro
$ qmake-qt4
$ ls
hello.cpp hello.pro Makefile
$ make
Compilation...
$ ls
hello.cpp hello.pro Makefile hello
$ ./hello 

Voilou !

Plus d'info sur qmake sur la doc de qt, Bon courage !

Dernière modification par omc (Le 09/10/2011, à 09:11)

Hors ligne

#19 Le 09/10/2011, à 15:28

Crone123

Re : Emplacement de Qt4

OK, Merci, je vais essayer tout ça....

Hors ligne