Was machen Linker eigentlich mit mehrfach definierten "Inline" -Funktionen?

In C und C ++,inlineatürlich können bei @ -Funktionen mit externer Verknüpfung mehrere Definitionen zum Zeitpunkt der Verknüpfung verfügbar sein, wobei davon ausgegangen wird, dass alle diese Definitionen (hoffentlich) identisch sind. (Ich beziehe mich natürlich auf Funktionen, die mit dem @ deklariert wurdeinline Linkage-Spezifikation, nicht für Funktionen, die der Compiler oder der Link-Time-Optimizer tatsächlich einbinden.)

So was tun gemeinsame Linker in der Regeltu wenn sie auf mehrere Definitionen einer Funktion stoßen? Im Speziellen

Sind alle Definitionen in der endgültigen ausführbaren Datei oder in der gemeinsam genutzten Bibliothek enthalten?Verbinden alle Aufrufe der Funktion mit derselben Definition?Sind die Antworten auf die oben genannten Fragen in einem oder mehreren der C- und C ++ - ISO-Standards erforderlich, und wenn nicht, tun die meisten gängigen Plattformen dasselbe?

P.S. Ja, ich weiß, dass C und C ++ separate Sprachen sind, aber beide unterstützeninline, und ihre Compiler-Ausgabe kann typischerweise durch denselben Linker verknüpft werden (z. B. GCCsld), daher glaube ich, dass es in dieser Hinsicht keinen Unterschied zwischen ihnen geben kann.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage