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