Seite 1 von 1
Frage zu QT-Bibliothken...
Verfasst: 7. Mai 2011 16:02
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...
Verfasst: 7. Mai 2011 18:06
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.
Verfasst: 7. Mai 2011 18:44
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.
Verfasst: 7. Mai 2011 19:02
von RobRoy1304
Ich danke euch für die Antworten, also schaue ich mal ob ich ein DEB/RPM Paket gebastelt bekomme.
Verfasst: 7. Mai 2011 23:42
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

Verfasst: 8. Mai 2011 08:36
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???
Verfasst: 8. Mai 2011 11:53
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

Verfasst: 8. Mai 2011 17:46
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.