2010-10-05 3 views
10

Woher weiß der Linker, welche Symbole zur Laufzeit aufgelöst werden sollen? Besonders interessiert mich, welche Informationen Shared-Object-Dateien tragen, die den Linker anweisen, Symbole zur Laufzeit aufzulösen. Wie funktioniert die dynamische Symbolauflösung zur Laufzeit, d. H. Welche ausführbare Datei das Symbol findet und ob mehrere Symbole mit demselben Namen definiert wurden, die gefunden werden?Woher weiß der Linker, welche Symbole zur Laufzeit aufgelöst werden sollen?

Was passiert, wenn die Datei nur statisch verknüpft wurde, aber dann dynamisch zur Laufzeit als Teil einer gemeinsam genutzten Bibliothek verknüpft ist? Welches Symbol wird von der ausführbaren Datei verwendet? Mit anderen Worten, ist es möglich, Symbole in einer ausführbaren Datei außer Kraft zu setzen, indem diese Symbole in eine gemeinsame Bibliothek eingebunden werden?

Die fragliche Plattform ist SUN OS.

+0

Jede Laufzeit ist anders. Sie müssen etwas genauer über Plattform sein. –

Antwort

1

Schauen Sie sich diesen Artikel von Linux Journal. Für weitere Informationen - vielleicht speziell zu Windows, AIX, OSX, etc. - würde ich den Wikipedia Artikel auf Linker (computing) und die darin enthaltenen Referenzen empfehlen.

2

Versuchen Sie den folgenden Link. Ich hoffe, es beantwortet Ihre Frage

http://www.linuxjournal.com/article/6463

+0

: O) Beat mich dazu. Ich habe in meiner Antwort auf denselben Artikel verwiesen. Up-Stimme für die Geschwindigkeit. –

+0

Ich benutze diesen Artikel tatsächlich als ein Beispiel für Leute, die mit C++ programmieren beginnen und ziemlich effektiv sind. – Vaibhav

+0

Was passiert, wenn die Datei ** nur ** statisch verknüpft wurde, aber dann dynamisch zur Laufzeit als Teil einer gemeinsam genutzten Bibliothek verknüpft ist? Welches Symbol wird von der ausführbaren Datei verwendet? Mit anderen Worten, ist es möglich, Symbole in einer ausführbaren Datei außer Kraft zu setzen, indem diese Symbole in eine gemeinsame Bibliothek eingebunden werden? – Leonid

0

Wenn eine Datei statisch verknüpft ist, gibt es keine Laufzeitauflösung. Wenn ein gemeinsam genutztes Objekt entweder dynamisch oder statisch mit derselben Bibliothek verknüpft ist, wirkt sich die mit der Bibliothek verknüpfte Version nur auf Code aus, der in der Bibliothek ausgeführt wird. Dies kann zu Problemen führen, wenn Sie zwei inkompatible Versionen derselben Bibliothek verknüpfen und Daten hin- und herschieben.

Verwandte Themen