Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » qt-programme sollen auf jedem rechner laufen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.08.2003, 10:55 Uhr
~qt-n00b
Gast


hi

Wenn ich ein Qt-programm schreibe und selbst die Version qt-3.0.3 verwende, wie kann ich dann sicherstellen, dass auch jemand mit einer etwas anderen qt-Version dieses Programm ausführen kann? Ich habe nämlich probehalber das Verzeichnis /usr/lib/qt-3.0.3/lib umbenannt und schon hat sich mein Programm nicht mehr starten lassen. Wenn also jemand eine neuere Version von qt installiert hat, dann hat ja bei ihm dieses Verzeichnis auch einen anderen Namen, das heißt es würde dort auch nicht funktionieren, oder?

cu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.08.2003, 11:17 Uhr
typecast
aka loddab
(Operator)


Das Problem ist, dass das bei dir weiterhin im Verzeichniss /usr/lib/qt-3.0.3/lib nach den libs sucht. Wenn du deine LD_LIBRARY_PATH Variable um das umbenante Verzeichniss ergänzt, dann sollte es tun.
Beachten solltest du aber, dass man eine qt-Version >=3.0.3 benötigt um das Programm dann auszuführen
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.08.2003, 11:23 Uhr
daredevil
Speicherteufel


@qt-n00b:
Er findet die Bibliotheken einfach nicht mehr, dass ist das problem.
--
tschüss,
DareDevil
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.08.2003, 18:16 Uhr
~qt-n00b
Gast


Ja, mir ist schon klar, dass er die Bibliotheken nicht mehr findet. Aber wenn er immer im Verzeichnis /usr/lib/qt-3.0.3/lib nach den Dateien sucht, dann gibt es doch ein Problem, wenn jemand z.B. Version 3.0.4 installiert hat. Bei solchen Benutzern heißt das Verzeichnis dann natürlich /usr/lib/qt-3.0.4 und schon werden die Dateien nicht mehr gefunden (wenn ich das richtig verstanden habe).
Und ich als Programmierer kann doch nicht jedesmal wenn eine neue Qt-Version rauskommt eine neue Version von meinem Programm machen.

Was ich nämlich beim Programmieren am meisten hasse ist, wenn ich ein Programm fertig habe und dann läuft es nur auf meinem eigenen PC. Ich will einfach ein Programm schreiben, das auf jedem Linux-PC lauffähig ist.

Was kann ich da machen?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.08.2003, 18:24 Uhr
0xdeadbeef
Gott
(Operator)


Die haben dann in aller Regel aber ihr Qt-Verzeichnis in der /etc/ld.so.conf stehen, oder einen entsprechenden Symlink (beispielsweise /usr/lib/qt3 -> /usr/lib/qt-3.0.3/lib) gesetzt und den in der /etc/ld.so.conf stehen. Dass der Linker die Bibliotheken findet, ist Sache des Systems, nicht deine als Programmierer.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.08.2003, 21:41 Uhr
~qt-n00b
Gast


Weil du gerade den Linker ansprichst:
Habe da was noch nicht ganz verstanden: Der Compiler wandelt Sourcedateien in Objectdateien um, dabei werden inkludierte Headerdateien mit in die Objectdatei kompiliert (daher müssen die benötigten Headerdateien am Zielrechner nicht vorhanden sein - sie stehen ja sowieso in der Object- und somit der Binärdatei).
Was genau macht aber dann der Linker mit der Objektdatei, damit daraus die ausführbare Binärdatei entsteht?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2003, 21:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


also:

präprozessor: includiert usw deine ganzen header etz
compiler: macht aus den quellcodedateien obj-dateien
linker: macht aus diesen eine binärdatei

was vielleicht verwirrend ist, beim VC (denke auch gcc) erstellt der compiler pro cpp-datei eine obj-datei, der linker setzt dann diese ganzen dateien zusammen und schmeisst alles unnötige raus (sollte er jedenfalls )
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.08.2003, 09:11 Uhr
~qt-n00b
Gast


Eine Frage hätte ich dann noch:
Wenn ich ein Qt-Programm schreibe inkludiere ich die benötigten Headerdateien in mein Programm. Diese Headerdateien werden dann ja sowieso mit in die Binärdatei kompiliert, wieso müssen dann trotzdem die Dateien in /usr/lib/qt3/lib auch noch vorhanden sein, damit das Programm läuft?

Danke!

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.08.2003, 09:39 Uhr
0xdeadbeef
Gott
(Operator)


Weil du sinnigerweise dynamisch linkst. Der Linker hat noch eine zweite Aufgabe, nämlich das Programm zur Laufzeit an die Bibliothek anzubinden.

Stell dir zum Beispiel mal vor, jedes KDE-Programm hätte alle Routinen der KDE-Library und aller Bibliotheken, von denen diese abhängt, fest eingebunden. KDElibs sind etwa 5 MB, Qt etwa 6, xlibs, glibc, libstdc++... das dürften so 20-30 MB sein. Sagen wir meinetwegen 20. KDE besteht aus schätzungsweise 100 Programmen, also kommen wir auf einen Overhead von 2 Gigabyte. Dazu kommt noch der eigentliche Programmcode und Bibliotheken, von denen im einzelnen zusätzlich noch abhängen - naja, im Endeffekt wäre KDE dann so 3-4 Gigabyte groß. Um das zu vermeiden, lagert man häufig benutzte Funktionen in Bibliotheken aus, die zur Laufzeit an das Programm gebunden werden; so braucht man den Code nur einmal auf der Platte und spart ohne Ende Platz. Diese Bibliotheken liegen standardmäßig in /lib (essentielle Bibliotheken wie die glibc) und /usr/lib (nicht zwingend erforderliche Bibliotheken wie Qt oder KDE).

Was die Header-Dateien angeht - in den Headerdateien stehen lediglich die Funktions- und Klassennamen, aber nicht, was die tun. Das ist zwar genug Information, um das Programm nachher an die Bibliothek anbinden zu können, reicht aber nicht, um ohne diese lauffähig zu sein. Es sei denn, man linkt statisch - aber das ist nur in Ausnahmefällen sinnvoll.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: