Почему динамическая библиотека не использует свои статически связанные функции?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему динамическая библиотека не использует свои статически связанные функции?

Сообщение Anonymous »

a (main calls c and d)
|
+-----------+-----------+
| |
libc.so (c calls b) libd.so (d calls b)
| |
| |
libb1.a libb2.a

В b{1,2}.cpp я определил две разные версии функции с именем b (с одним и тем же идентификатором).
Я ожидал, что когда функции {c,d в lib{c,d}.so вызывают b, они будут вызывать версию, которая статически связана с собой соответственно.

Однако результат оказался неожиданным: во время выполнения он всегда ведет себя так, как будто существует только одна единственная версия b.

Мой вопрос:
Является ли такое поведение детерминированным?
Независимо от того, сколько существует повторяющихся определений с одним и тем же именем, и независимо от используемого метода связывания (динамического, статического и т. д.), будет ли когда-либо выбрано только одно из них во время выполнения?
Всегда ли компоновщик и загрузчик гарантируют такое поведение?
(Приношу извинения за недостаток знаний относительно этих низкоуровневых деталей.)

Ниже приведен краткий тестовый код:
  • headers:
    // b.h
    #include
    std::string b(const std::string& s);

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

    // d.h
    #include
    std::string d();
  • источники:
    // a.cpp
    #include
    #include "c.h"
    #include "d.h"
    int main() {std::cout

    Подробнее здесь: https://stackoverflow.com/questions/798 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»