Freunde, ich habe zwei Dateien, a.c und b.c. Ich habe eine Funktion foo in a.c definiert, die von b.c.Auflösen von Referenzen zu Verbindungszeit oder Laufzeit?
Von dem, was ich verstehe, wenn der Compiler versucht, bc zu kompilieren, wird es sehen, dass die Implementierung von foo
nicht in b ist, so wird es einen Eintrag für foo in der Symboltabelle hinzufügen, die bei der Verknüpfung aufgelöst werden soll Zeit. Ich habe dieses Konzept richtig verstanden.
Jetzt habe ich eine andere Funktion printf in b.c, die in glibc implemented ist. Soweit ich weiß, kann printf zur Ladezeit oder zur Laufzeit verknüpft werden. Wenn printf zur Laufzeit verknüpft wird, muss für jeden Aufruf von printf ein Stub vorhanden sein, der zur Laufzeit mit einem Systemaufruf aufgelöst wird.
meine Frage ist "Ist mein Verständnis richtig ??? + wie bestimmt der Compiler, dass eine Funktion foo würde durch Linker und nicht zur Laufzeit aufgelöst werden?"
Ich bemerkte einige ähnliche Fragen, konnte aber ihre Bedeutung hier nicht verstehen ???