Общая библиотека: состояние и алмаз

Допустим, у меня есть приложение, которое вызывает библиотеки liba.so и libb.so.

Обе эти библиотеки ссылаются на libc.so.

Если licc.so хранит некоторую информацию о состоянии, будет ли это состояние одинаковым для liba.so и libb.so?

Если да, то есть ли способ сделать это иначе?


person Jacques    schedule 21.05.2015    source источник


Ответы (1)


Обе эти библиотеки ссылаются на libc.so.

libc.so особенная для UNIX: это библиотека поддержки времени выполнения C. Я предполагаю, что вы на самом деле не имели в виду libc.so и спрашиваете «если и libfoo.so, и libbar.so связаны с libbaz.so ...».

Если licc.so хранит некоторую информацию о состоянии, будет ли это состояние одинаковым для liba.so и libb.so?

Если libbaz.so имеет закрытый символ данных int baz, будет только один экземпляр baz, так что да: состояние будет таким же.

есть ли способ сделать это иначе?

Некоторые операционные системы (особенно Solaris и Linux) позволяют динамически загружать libfoo.so и libbar.so в отдельные пространства имен компоновщика, используя dlmopen. Это также загрузит libbaz.so дважды, и будет два экземпляра (копии) символа baz. Остерегайтесь: это не переносимо, его трудно исправить и сложно отлаживать.

person Employed Russian    schedule 21.05.2015