Ich habe eine Anwendung, die zum Zwecke der Wiederverwendung von Code in mehrere Bibliotheken aufgeteilt ist. Unter Windows muss ich nur die .dll-Dateien im selben Pfad wie die ausführbare Datei ablegen und sie werden automatisch gefunden. Unter Linux (da es die Pfade zu Dingen fest codiert) muss ich die Umgebungsvariable LD_LIBRARY_PATH
angeben oder die Bibliotheken vor der ausführbaren Datei laden.Gemeinsam genutzter Bibliothekspfad als ausführbares Verzeichnis
Ich habe einige Dinge über das Einbetten des Pfades mit der Linker-Option -Wl,-rpath=<PATH>
gesehen und ich habe es mit .
als Pfad versucht. Aber das sieht nur im aktuellen Arbeitsverzeichnis aus, nicht im Verzeichnis der ausführbaren Datei.
Gibt es eine Möglichkeit, im Linker anzugeben, standardmäßig im Verzeichnis der ausführbaren Datei für die gemeinsam genutzten Bibliotheken zu suchen (wie unter Windows)?
Danke! Matt
Wenn Sie $ ORIGIN verwenden, müssen Sie sicherstellen, dass das $ korrekt zitiert wird, so dass der Linker es tatsächlich sieht. Von der Kommandozeile wollen Sie "-rpath \ $ ORIGIN" und von einem Makefile, das Sie wollen "-rpath \ $$ ORIGIN" –
Ich benutze Eclipse und CDT, und ich setze die Option unter den verschiedenen Linker Flags. Ich lege '-Wl, -rpath = $$ ORIGIN 'und im Ausgabefenster zeigt es es mit einem einzigen $. Aber es scheint nicht zu funktionieren. Ich habe verschiedene Varianten ausprobiert, aber nichts passiert. Es ist wie der Linker ignoriert die Flagge. Ich habe versucht: -Wl, -rpath = $ ORIGIN -Wl, - rpath = $ ORIGIN -Wl, -rpath =/$ ORIGIN -Wl, -rpath = $ ORIGIN/ -Wl, -rpath =/$ ORIGIN/ etc. – CuppM
Verwenden Sie Elfdump oder die lokale Entsprechung, um zu sehen, was drin ist? Verwenden Sie LDD und sehen Sie, was es sagt? – bmargulies