2008-09-20 7 views
33

Unter Linux/GCC kann ich das -rpath-Flag verwenden, um einen ausführbaren Suchpfad für gemeinsam genutzte Bibliotheken zu ändern, ohne mit Umgebungsvariablen zu temperieren.Gibt es ein Windows/MSVC-Äquivalent zum Flag -rpath Linker?

Kann dies auch unter Windows durchgeführt werden? Soweit ich weiß, werden dlls immer im Verzeichnis der ausführbaren Datei und in PATH gesucht.

Mein Szenario: Ich möchte geteilte Bibliotheken in Standorte nach ihren Eigenschaften (32/64bit/Debug/Release) setzen, ohne sich um eindeutige Namen kümmern. Unter Linux ist dies problemlos über rpath möglich, aber unter Windows habe ich noch keine Möglichkeit gefunden.

Danke für Hinweise!

Antwort

4

Die Suchreihenfolge für DLLs in Windows ist unter this page auf MSDN beschrieben. Wenn Sie run-time dynamic linking verwenden, können Sie den Ordner angeben, wenn Sie LoadLibrary aufrufen.

3

"Isolated applications" ist ein Mechanismus zum Einbetten eines XML-Manifests, das die DLL-Abhängigkeiten beschreibt.

+0

Dieser Mechanismus ist nur für Baugruppen gedacht. Dies gehört zu verwaltetem Code. – Christian

+0

Haben Sie eine Referenz dafür? Alles, was ich zu diesem Thema gesehen habe, scheint native Code-DLLs gleich zu lassen. –

+0

Assembly ist definiert auf [Wikipedia] (https://en.wikipedia.org/wiki/NET_assembly). MSDN scheint den Begriff Assembly nur in Verbindung mit den MSI [Assemblies] (http://msdn.microsoft.com/en-us/library/aa367757%28v=vs.85%29.aspx) zu verwenden. Ihr referenzierter Artikel gehört also zu einer installierten Anwendung. Die rpath-Informationen sind in die Anwendung eingebettet und werden nicht an eine Installation weitergegeben. Rpath ist unmittelbar nach der Verknüpfung wirksam. – Christian

16

Leider gibt es keine direkte Analogie zu RPATH. Es gibt eine Reihe alternativer Möglichkeiten, von denen jede auf ihre eigene Weise höchst unerwünscht ist.

Vorausgesetzt, dass Sie für jeden Build-Flavor eine andere EXE-Datei benötigen, um Konflikte mit Laufzeitbibliotheken zu vermeiden, können Sie jede EXE im gleichen Ordner wie die DLLs ablegen.

Wie Sie bereits erwähnt haben, ist die universellste Methode, die PATH-Variable zu ändern, indem Sie eine Batchdatei verwenden, um die exe zu starten.

Sie können stattdessen das aktuelle Arbeitsverzeichnis ändern, bevor Sie das Programm in den gewünschten DLL-Ordner ausführen.

Sie können die Funktion SetDllDirectory oder AddDllDirectory in Ihrer exe verwenden. Dies ist wahrscheinlich der RPATH am nächsten, funktioniert aber nur mit WinXP SP1 oder höher.

Wenn Sie bereit sind, den Dateinamen jedes Exe-Flavors zu ändern, können Sie den Registrierungsschlüssel "App Paths" verwenden. Jede exe benötigt einen eindeutigen Dateinamen.