Wie kann ich festlegen, wo eine QT -App ein QT -Modul findet?
-
21-09-2019 - |
Frage
Ich möchte libqtgui.so.4 libqtnetwork.so.4 und libqtcore.so.4 in demselben Verzeichnis wie in meiner App einbeziehen. Wie würde ich Qt das verstehen lassen? y Zweck ist es, eine eigenständige App zu haben, die gemeinsam genutzte Bibliotheken verwendet
Lösung
Das Einstellen der Umgebungsvariablen ld_library_path ist eine Option. Zum Beispiel:
export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH
Eine andere Möglichkeit besteht darin, den RPATH Ihrer QT -Anwendung während der Verknüpfung festzulegen. Wenn Sie den RPATH auf den Wert "$ origin" setzen, wird der dynamische Linker in demselben Verzeichnis wie Ihre QT -Anwendung zur Laufzeit nachgesehen. Wenn Sie beispielsweise QMake verwenden, fügen Sie Ihrer Projektdatei den folgenden Snippet hinzu:
unix:!mac{
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=
}
Dadurch wird der RPATH auf "$ origin: $ origin/lib: $ origin/libs" festgelegt, was bedeutet, dass der dynamische Linker zunächst in den Ort Ihrer QT -Anwendung und dann in einem Lib -Unterverzeichnis an seinem Standort und dann in einem LIBS schaut Unterverzeichnis an seinem Standort und schließlich an jedem systemdefinierten Standorte.
Andere Tipps
UNIX / Linux wird zuerst in LD_LIBRARY_PATH (falls eingestellt) suchen, bevor sie in die System -Standard -Libs sucht. Wenn Sie das einstellen, können Sie tatsächlich überschreiben. Genau wie das Festlegen des Pfades unter Windows. Gleicher Effekt. Die Bestellung ist wichtig.
Sie können hinzufügen ./ oder. auch an ld_library_path.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
LD_LIBRARY_PATH
und QMAKE_RPATH
Nie für mich gearbeitet. Stattdessen setze ich QMAKE_RPATHDIR
in meinem .pro
Datei. Zum Beispiel nach dem Bau und der Installation (make install
) Qt, es wurde in platziert /usr/local/Trolltech/Qt-4.8.5/lib/
. Ich schreibe dann Folgendes in meine .pro
Datei:
QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/
Anmerkung 1: Relative Pfade scheinen nicht zu funktionieren. Bevorzugen Sie absolute Wege.
Anmerkung 2: Wenn Sie dann sind make
, Sie können sehen, dass dem Linker die folgende Option gegeben wird: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
Anmerkung 3: Um sicherzustellen, dass die Binärverbindungen dynamisch mit der richtigen Bibliothek verbunden sind, können Sie die Version von QT zur Laufzeit angezeigt werden qVersion()
.