Was genau bedeutet " - rdynamic` tun ist und Wann genau wird Sie benötigt?
Was genau macht -rdynamic
(oder --export-dynamic
auf linker-Ebene) und in welcher Beziehung steht es zum symbol Sichtbarkeit definiert durch die -fvisibility*
Fahnen oder Sichtbarkeit pragma
s und __attribute__
s?
Für --export-dynamic
, ld(1) erwähnt:
...
Wenn Sie "dlopen" laden ein dynamisches Objekt, das zu finden Sie wieder
zu den Symbolen durch das Programm definiert, eher als in einigen anderen dynamischen
Objekt, dann werden Sie wahrscheinlich benötigen,
verwenden Sie diese option, wenn die Verknüpfung das Programm selbst. ...
Ich bin mir nicht sicher, ob ich vollständig verstehen. Könntest du bitte ein Beispiel geben, das nicht funktioniert ohne -rdynamic
aber mit ihm macht?
Bearbeiten:
Ich versuchte wirklich kompilieren ein paar dummy-Bibliotheken (eine einzige Datei, multi-Datei, verschiedene -O-Ebenen, einige inter-Funktionsaufrufe, einige versteckte Symbole, einige sichtbar), mit und ohne -rdynamic
, und so weit ich habe immer byte-identisch Ausgänge (wenn man alle anderen flags, die Konstante natürlich), das ist ziemlich rätselhaft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein einfaches Beispiel-Projekt zur Veranschaulichung der Verwendung von
-rdynamic
.bar.c
main.c
Makefile
Hier
bar.c
wird eine shared librarylibbar.so
undmain.c
wirdein Programm, das
dlopen
slibbar
und fordertbar()
aus der Bibliothek.bar()
Anrufefoo()
, die äußere ist inbar.c
definiert und inmain.c
.So, ohne
-rdynamic
:Und mit
-rdynamic
:Ich rdynamic benutzen, um drucken Sie Ablaufverfolgungen mithilfe der
backtrace()
/backtrace_symbols()
von Glibc.Ohne
-rdynamic
Sie nicht get-Funktion Namen.Mehr wissen über die
backtrace()
Lesen über hier.