# [gelöst] QT- und kde-bibliotheken nicht richtig verlinkt?

## markusk21

Hallo,

ich wollte mal wieder etwas ins Programmieren reinschnuppern. 

Mein erstes X11-Programm sucht die Datei "qapplication.h". Die ist zu finden in

/usr/include/qt4/Qt/qapplication.h

Allerdings gibt c++ die Meldung: 

 *Quote:*   

> 
> 
> firstprog.cpp:20:41: qapplication.h: Datei oder Verzeichnis nicht gefunden
> 
> 

 

Mit 

```

#include <qt4/Qt/qapplication.h>

```

funktioniert dies dann, aber dann werden andere q-Bibliotheken nicht gefunden die in qapplication eingebunden werden.

Mit kapplication.h und kmainwindow.h ist es übrigens das selbe.

Muss ich ein zusätzliches paket mergen oder wo liegt der Fehler?

Gruß

MarkusLast edited by markusk21 on Tue Aug 08, 2006 10:26 pm; edited 1 time in total

----------

## firefly

öhm wie sieht deine  gcc cmd zeile aus ?

----------

## hoernerfranz

vermutlich fehlen die variablen QTDIR und KDEDIR im environment.

----------

## markusk21

Also Frage Nr. 1 (Kompiler-Befehl):

c++ firstprog.cpp

Mit gcc sieht es genau so aus:

 *Quote:*   

> 
> 
> $ gcc firstprog.cpp
> 
> firstprog.cpp:20:41: qapplication.h: Datei oder Verzeichnis nicht gefunden
> ...

 

```

export QTDIR="/usr/lib/qt4/"

```

habe ich in /etc/profile eingefügt und auch spaßeshalber mal 

```

QTDIR="/usr/lib/qt4" gcc firstprog.cpp

```

 ausgeführt.

Keine Änderung in sicht.

Das ist der Quellcode:

```

#include <qapplication.h>       //QApplication

#include <qmainwindow.h>        //QMainWindow

using namespace std;

int main(int argc, char **argv){

        // Create a QApplication object (required)

        QApplication app(argc, argv);

        // Create a QMainWindow object

        QMainWindow *window = new QMainWindow();

        // Move and resize the QMainWindow object

        // left=200, top=200,, width=400, hight=300

        window->setGeometrie(200,200,400,300);

        // main window = QMainwindow object

        app.setMainWidget(window);

        // set Window Title

        window->setCaption("My QMainWindow example");

        // Show the window

        window->show();

        // Go to the main loop (required)

        return app.exec();

}

```

Wie müssen denn die QTDIR und KDEDIR aussehen und wo füge ich sie ein (ist /etc/profile richtig)?

----------

## hoernerfranz

 *markusk21 wrote:*   

> 
> 
> ```
> 
> export QTDIR="/usr/lib/qt4/"
> ...

 

das kann nicht klappen, denn die header von qt4 sind in /usr/include/qt4

allerdings weiss ich auch nicht genau wie QTDIR f. qt4 sein muss,

bei qt3 ist es jedenfalls /usr/qt/3 - /usr/qt/4 gibts aber nicht

(könnte man mal anlegen und von dort aus dann lib bzw. include als symlinks auf /usr/lib/qt4 bzw /usr/include/qt4).

QTDIR kannst du global in /etc/profile definieren, oder auch userspezifisch in ~/.bashrc

----------

## markusk21

Oh, man. Ich dachte eigentlich gerade das wäre unter Gentoo kein Problem ....

Es funktioniert immer noch nicht!!!

Folgendes habe ich schon mal herausgefunden:

qapplication.h gibt es hier:

 *Quote:*   

> /usr/qt/3/include/qapplication.h
> 
> /usr/include/qt4/Qt/qapplication.h
> 
> /usr/include/qt4/QtGui/qapplication.h
> ...

 

Meine /etc/profile sieht jetzt so aus:

 *Quote:*   

> export QTDIR="/usr/qt/3"
> 
> export KDEDIR="/usr/kde/3.5"
> 
> export LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR:$LD_LIBRARY_PATH
> ...

  export LD_LIBRARY_PATH=$QTDIR/include habe ich auch probiert.

Nach Änderungen habe ich immer  *Quote:*   

> source /etc/profile 

  ausgeführt

Aber qapplication.h wird immer noch nicht gefunden!!!!

Ich habe es auch mit /usr/include/qt4 als QTDIR versucht. Selbes Ergebnis. Dort gibt es aber auch keine qapplication.h (s.o.).

Verdammt das kann doch nicht so schwer sein!! emerge funktioniert tadellos!!!! Wo liegt das Problem???

Ich muss doch nicht "root" sein um eigene Programme zu kompilieren, oder?

----------

## scourge

Zum einen heißt das Geometry und nicht Geometrie, und zum anderen 

```
g++ firstprog.cpp  -I/usr/qt/3/include -L/usr/qt/3/lib -lqt -o firstprog
```

Gruß,

Thomas

----------

## markusk21

Danke für den Tipp.

Die g++ Zeile läuft! Aber kann man die Bibliotheken nicht in einen Pfad einbinden?

----------

## markusk21

Ok,

nach langem suchen und experimentieren bin ich afu folgende Einträge in die /etc/profile gekommen:

```
QTDIR="/usr/qt/3:${QTDIR}"

PATH=$QTDIR/bin:$PATH

LD_LIBRARY_PATH=$QTDIR/include:$QTDIR/lib:$LD_LIBRARY_PATH
```

Kann das jemand bestätigen? Es funktioniert leider nicht, habe source /etc/profile ausgeführt aber bekomme immer noch Fehlermeldungen:

 *Quote:*   

> $ g++ qapp.cpp -lqt -o qapp
> 
> qapp.cpp:2:26: qapplication.h: Datei oder Verzeichnis nicht gefunden
> 
> qapp.cpp:3:20: qlabel.h: Datei oder Verzeichnis nicht gefunden
> ...

 

----------

## XMath

Moin,

ja kann ich bestätigen: Funktioniert so nicht  :Wink: .

Du hast zwar damit den Pfad für die Bibliotheken gesetzt, aber nicht den Pfad für die Includes. Deswegen nutzt man meist ein Makefile. 

Könntest höchstens mal Ausprobieren ob es hilft $QTDIR/include in PATH aufzunehmen.

----------

## markusk21

Also, ich komme nicht weiter.

Ich will doch nur ein x11-Programm schreiben können! Es kann doch nicht sein, dass mir keiner sagen kann, wie ich eine Gentoo-Distribution dazu bekomme ein Programm mit KDevelop erstellen und kompilieren zu können.

Ich habe einen weiteren Thread aufgemacht weil ich mit KDevelop ein QT-Programm erstellen möchte und ich einfach keinen Schritt weiter komme. Hier ist er.

----------

## branitar

Versuch mal #include <QApplication> statt #include <qapplication.h>. Oder besser noch QCoreApplication.

In Qt4 kann man die Klassen angeben anstelle der .h-Files. Frag mich nicht warum, aber offenbar verspricht Trolltech sich davon etwas...

----------

## _hephaistos_

sei mir echt nicht böse, aber das kann so nicht funktionieren!

du musst natürlich gegen qt etc. selber linken.

dh: mit c++ yourfile.cpp wirds nix werden!

wie im anderen thread geschrieben: probier es mit einem qmake project!

bzw. wär gut, wenn du dich ein wenig damit auseinandersetzt, zB mal mit dem QT Tutorial anfangen: 

QT3: http://doc.trolltech.com/3.0/tutorial.html

QT4: http://doc.trolltech.com/4.0/tutorial.html

irgendein mod sollte diese threads dann verbinden oder so hm? sonst hilfts dem nächsten auch nicht weiter  :Very Happy: 

----------

## franzf

Was willst du eigentlich schreiben?

Ein Projekt mit QT3 oder mit QT4?

Dein erster Post deutet darauf hin dass es QT4 sein soll.

Dass du mit kdevdesigner dein UI erstellst auf QT3.

Dein Makefile sagt auch QT3:

```
[...]

QT_INCLUDES = -I/usr/qt/3/include

QT_LDFLAGS = -L/usr/qt/3/lib

[...]
```

In diesen beiden Zeilen kannst du z.B. die Pfade zu deinen qt4-includes und libs einsetzen.

Wenn du mit QT4 arbeitest kannst du auch z.B. statt

#include <qapplication.h>

ein 

#include <QApplication>

usw. nehmen. So weiß man dann gleich dass es QT4 ist  :Wink: 

Grüße

Franz

----------

## SinoTech

 *branitar wrote:*   

> Versuch mal #include <QApplication> statt #include <qapplication.h>. Oder besser noch QCoreApplication.
> 
> In Qt4 kann man die Klassen angeben anstelle der .h-Files. Frag mich nicht warum, aber offenbar verspricht Trolltech sich davon etwas...

 

Es dürften beides Header files, nur das bei zweiterem die Dateiererweitung fehlt (So wie es "iostream.h" und "iostream" gibt).

Mfg

Sino

----------

## _hephaistos_

gut, dass er/sie/es einen zweiten thread aufgemacht hat.

weil dort wär das problem eigentlich schon gelöst...

----------

## Carlo

 *hoernerfranz wrote:*   

> vermutlich fehlen die variablen QTDIR und KDEDIR im environment.

 

QTDIR ist nur für Qt 3.x zu verwenden. Für Qt 4 nimmst du pkg-config.

Für QtCore gilt beispielsweise "-I`pkg-config --variable=includedir QtCore`".

----------

## markusk21

 *franzf wrote:*   

> Was willst du eigentlich schreiben?
> 
> Ein Projekt mit QT3 oder mit QT4?
> 
> Dein erster Post deutet darauf hin dass es QT4 sein soll.
> ...

 

Das war ein entscheidender Hinweis!!!! Mir war gar nicht klar, dass ich 2 QT-Versionen installiert habe, ganz zu schweigen davon, dass ich alte Header etc einbinde.

Ich habe jetzt (hoffentlich vollständig) meine Versuche auf QT4 umgestellt. So funktioniert auch unter Kdevelop einiges mehr auf Anhieb   :Very Happy:  .

Vielen Dank noch mal an alle. 

Ich werde versuchen, die vielen Tipps und Hinweise nach und nach abzuarbeiten. 

Anfangen werde ich mit [url] http://doc.trolltech.com/4.0/tutorial.html[/url]

und dann weitersehen.

LG.

----------

