Verknüpfung mit den Optionen -R und -rpath unter Windows
Ich verwende den GCC-Compiler (MinGW) unter Windows XP.Ich habe eine DLL-Bibliothek erstelltlibdir.dll
, als ich versuchte, ein Programm zu erstellen, das diese Bibliothek verwendet.
Ich möchte diese DLL-Datei nicht in den System- oder System32-Ordner legen oder den Pfad zu ihr in der PATH-Variablen festlegen. Ich möchte diese Informationen nur dem Programm selbst geben.
Ich weiß, es gibt ein-R
und-rpath
Schalter vorhanden, also wollte ich es mit einem von ihnen verbinden.
Erster -Pfad:
gcc -L / path / to / lib -Wl, -rpath, / path / to / lib main.o -ldir -o prog
Than -R:
gcc -L / path / to / lib -Wl, -R, / path / to / lib main.o -ldir -o prog
Dieser Link führt erfolgreich zuprog
aber wenn ich das Programm starte, druckt Windows die Meldung, dass es @ nicht finden kalibdir.dll
.
Also meine Frage ist, was schief gelaufen ist, warum Pfad zulibdir.dll
ist zur Laufzeit nicht bekannt, auch wenn ich entsprechende Schalter benutze?
Nehmen wir an, ich habe prog1 und prog2, die jeweils eine eigene Kopie von libdir.dll enthalten, und beide starten zur gleichen Zeit mit dem Laden von Code in die Bibliothek ist eine Kopie und benutzt diese für beide Programme?
Die zweite Frage bezieht sich darauf, wie Bibliotheken geladen werden (jedes Betriebssystem). Laden Linker immer die gesamte Bibliothek oder nur Teile, die benötigt werden? Zum Beispiel, wenn Programmreferenzen @ funktionierfoo()
Was befindet sich in der Bibliothek? Ordnet der Linker zuerst nur diese Funktion oder die gesamte Bibliothek dem Speicher zu?