Ich habe ein Linux Qt-Programm. Ich möchte, dass es vorzugsweise die (dynamischen) Qt-Bibliotheken im Verzeichnis der ausführbaren Datei verwendet, falls sie existieren, andernfalls verwende die Qt-Bibliotheken des Systems. RPATH zur Rettung.Einstellung der RPATH-Reihenfolge in QMake
ich die folgende Zeile in der Qmake ‚s .proDatei:
QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\''
und Blick auf die ausführbare Datei mit readelf Ich sehe:
0x000000000000000f (RPATH) Library rpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib]
0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib]
rechts scheint, aber ldd zeigt, dass es die Systemversion verwendet:
qmake ist resultierende Makefile die Reihenfolge der beiden rpaths zu tauschen, so $ ORIGIN kommt nach/usr/local/..., ich das richtige VerhaltenWenn ich manuell bearbeiten:
0x000000000000000f (RPATH) Library rpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN]
0x000000000000001d (RUNPATH) Library runpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN]
libQt5Core.so.5 => ./libQt5Core.so.5 (0x00007fb92aba9000)
Mein Problem ist, mit wie qmake konstruiert die endgültige LFLAGS-Variable. Ich kann nicht herausfinden, wie ich meine Addition ($ ORIGIN) hinter die Systembibliothek stellen kann. Irgendwelche Ideen?
Warum möchten Sie lokale Bibliotheken über Systembibliotheken bevorzugen? In einem normalen Bereitstellungsszenario, in dem Sie Bibliotheken mit der Binärdatei bereitstellen, haben Sie nur lokale oder lokale Systeme. –
Ich würde dies nicht für ein Produktionsprodukt tun, aber es ist nützlich für das Debugging, wo die lokale Bibliothek eine zusätzliche Diagnoseausgabe hat (zum Beispiel). Ich weiß, dass ich in einem Wrapper-Skript einfach etwas in der Art von LD_LIBRARY_PATH verwenden kann, aber ich hastete dieses QMAke/RPATH-Hasenloch hinunter und jetzt bin ich neugierig, wie ich QMake machen kann, was ich will ... –