Общая библиотека: государственная и алмазная

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

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

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

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

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 условное обозначение. Осторожно: это не переносимо, трудно понять правильно и трудно отладить.

Другие вопросы по тегам