Frage zu QT-Bibliothken...

Alles rund um die Programmierung mit Qt
Antworten
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Frage zu QT-Bibliothken...

Beitrag von RobRoy1304 »

Hallo Leute,

damit mein Programm auch auf Rechner läuft wo Qt nicht installiert ist, liefere ich für Windows die Dll's mit aus. Diese liegen im Programmordner und alles funzt.(QtGui/QtCore/QtSql)
Jetzt wollte ich das für Linux ebenfalls so machen, also mit den so-Dateien, aber das Programm läuft leider nicht auf einem 'blanken' System.

Als Fehlermeldung, wenn ich das Programm über Konsole starten möchte, zeigt er mir:

Code: Alles auswählen

lava 2: error while loading shared libraries: libQtSql.so.4: cannot open shared object file: No such file or directory
Im Programmordner liegen u.a. die Dateien ''libQtSql.so.4.7.0'' und ''libQtSql.so.4'', wobei die letztere scheinbar nur eine Verknüpfung ist.

Meine Frage ist nun, sind das die falschen Dateien, oder schaut er unter linux nicht in dem Programmordner sondern sucht die Datein nur irgendwo im system-ordner wie z.b. ''/usr/lib/'' ???

QtCreator 4.7.0
OS Ubuntu 10.10 32-bit

Vielen Dank...
saar
Beiträge: 11
Registriert: 3. Januar 2011 14:15

Beitrag von saar »

Setze den LD_LIBRARY_PATH so, dass er das Installationsverzeichnis der Qt .so-Dateien enthält. Wenn Du diese im Installationsverzeichnis Deiner Applikation hast, so setze den LD_LIBRARY_PATH auf
export LD_LIBRARY_PATH="Pfad_zum_InstallVerzeichnis;$LD_LIBRARY_PATH"
und starte dann Deine Applikation von der shell.

Wenn Du via Klick auf ein Icon starten willst, dann das obige export sowie den Start der Applikation in ein Shellscript packen und dieses mit dem Icon verknüpfen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das mit dem Bashscript ist schön und gut, man sollte aber lieber den Standardweg gehen und das Paketverwaltungssystem der einzelnen Distributionen nutzen. Ein RPM oder DEB ist schnell erstellt, die passenden Abhängigkeiten eintragen, und NUR die eigenen Binaries installieren, um Qt und alles andere kümmert sich dann das pkg-System.
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Beitrag von RobRoy1304 »

Ich danke euch für die Antworten, also schaue ich mal ob ich ein DEB/RPM Paket gebastelt bekomme.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

LD_LIBRARY_PATH benutzen ist unschön. Linux schaut im Programm Order nach, du hast da auch die richtigen Datein liegen. Eine davon ist eine Verknüpfung. Und wo zeigt sie hin? Warhscheinlich nach /usr/lib/libQtSql.so.4.7.0 und diese Datei existiert nicht. Ganz einfach :)
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Beitrag von RobRoy1304 »

Vielen Dank für deine Antwort, kater.

Ich habe versucht die Datei libQtSql.so.4.7.0 umzubenennen in libQtSql.so.4 , das brachte keinen Erfolg.(gleiche Fehlermeldung)

Also wenn ich das richtig verstehe benötige ich die Verknüpfung libQtSql.so.4 und müßte die Vernüpfung nur auf den aktuellen Ordner ändern. Nur wie verändere ich die Verknüpfung, so das diese immer auf den aktuellen Ordner zeigen???
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Normal hätte es gehen sollen. Du brauchst keine einzige Verknüpfung. Ich würde erstmal die Größe der Datein kontrollieren, vllt. hat sich doch noch eine Verknüpfung versteckt. Das ist echt kein Kunstwerk, hab das schon 100mal gemacht :)
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Beitrag von ScyllaIllciz »

Unter Linux ist es so, dass Lib's ein Binary haben z.B. libQtGui.so.4.7.0, dazu werden 3 Symlinks angelegt/benötig libQtGui.so.4.7 --> libQtGui.so.4.7.0, libQtGui.so.4 --> libQtGui.so.4.7. , libQtGui.so --> libQtGui.so.4.7.0. Bei Lib's mit noch mehr Versionsnummern entsprechend mehr Links. Wenn Du Deine App linkst, dann gegen libQtGui.so. Somit musst Du beim Linken nicht wissen, welche Version vorhanden ist. Das wird durch die Symlinks aufgelöst. Also wenn Du die Lib's als Binary hast. Dann einfach die fehlenden Links anlegen, wenn nicht vorhanden. Normalerweise wird das vom Packtsystem erledigt.

Ob Dein vorhandenes File ein Lib ist kannst Du mit "file Dateiname" prüfen.
Antworten