O que os vinculadores realmente fazem com funções multi-definidas `inline`?

Em C e C ++,inline É claro que as funções com vínculo externo podem ter várias definições disponíveis no momento do vínculo, presumindo-se que essas definições sejam todas (espero) idênticas. (Obviamente, estou me referindo a funções declaradas com oinline especificação de ligação, não para funções que o compilador ou o otimizador de tempo de link realmente alinha.)

Então, o que vinculadores comuns normalmenteFaz quando eles encontram múltiplas definições de uma função? Em particular:

Todas as definições estão incluídas na biblioteca executável ou compartilhada final?Todas as invocações da função estão vinculadas à mesma definição?As respostas às perguntas acima são exigidas por um ou mais dos padrões ISO C e C ++ e, se não, as plataformas mais comuns fazem a mesma coisa?

P.S. Sim, eu sei que C e C ++ são linguagens separadas, mas ambos suportaminline, e a saída do compilador normalmente pode ser vinculada pelo mesmo vinculador (por exemplo, GCCsld), então acredito que não pode haver diferença entre eles nesse aspecto.

questionAnswers(4)

yourAnswerToTheQuestion