Warum nutzt die Dynamic Link Library ihre statisch verknüpften Funktionen nicht?C++

Programme in C++. Entwicklerforum
Anonymous
 Warum nutzt die Dynamic Link Library ihre statisch verknüpften Funktionen nicht?

Post by Anonymous »

Code: Select all

      a (main calls c and d)
|
+-----------+-----------+
|                       |
libc.so (c calls b)  libd.so (d calls b)
|                       |
|                       |
libb1.a                 libb2.a
In b{1,2}.cpp habe ich zwei verschiedene Versionen einer Funktion namens b definiert (mit demselben Bezeichner).
Ich habe erwartet, dass, wenn die Funktionen {c,d} in lib{c,d}.so b aufrufen, sie jeweils die Version aufrufen würden, die statisch mit sich selbst verknüpft war.

Das Ergebnis war jedoch unerwartet: Zur Laufzeit verhält es sich immer so, als ob nur eine einzige Version von b existiert.

Meine Frage lautet:
Ist dieses Verhalten deterministisch?
Unabhängig davon, wie viele doppelte Definitionen mit demselben Namen existieren und unabhängig von der verwendeten Verknüpfungsmethode (dynamisch, statisch usw.), wird zur Laufzeit immer nur eine davon ausgewählt?
Gewährleisten der Linker und der Loader immer dieses Verhalten?
(Ich entschuldige mich für meinen Mangel an Wissen über diese Low-Level-Details.)

Unten finden Sie den prägnanten Testcode:
  • Header:

    Code: Select all

    // b.h
    #include 
    std::string b(const std::string& s);
    

    Code: Select all

    // c.h
    #include 
    std::string c();
    

    Code: Select all

    // d.h
    #include 
    std::string d();
    
  • Quellen:

    Code: Select all

    // a.cpp
    #include 
    #include "c.h"
    #include "d.h"
    int main() {std::cout

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post