Предположим, у меня есть библиотека (A)
, реализующая шаблон singleton (в его реализации есть статическая переменная).Что происходит со статическими переменными, когда библиотеки статически связаны
(A)
библиотека скомпилирована как статическая библиотека.
Теперь, скажем, у меня есть в моем probject:
(B)
, другую статическую библиотеку, связывающую статический(A)
.(C)
, другая статическая библиотека, связывающая статически с(A)
.(D)
, программа верхнего уровня, связанная с(B)
и(C)
.
В конце концов, мой синглтон действительно одиночный (и моя переменная действительно статична)? Имеются ли (B)
и (C)
, фиксируя ту же статическую переменную от (A)
(это unic)? Или тот факт, что (A)
был статически связан дважды вложенным кодом (A)
, дважды заканчивается моей статической переменной от (A)
, появляющейся дважды в последнем двоичном коде? Тогда, если (B)
изменяет значение статической переменной, (C)
не увидит изменения?
Примечание: Я испытал это при изменении библиотек проекта, которые будут связаны статически, а не динамически. Мне просто интересно, что я сделал что-то не так, или если это нормальное поведение.
Статическая библиотека в основном представляет собой архив объектных файлов, который привязывается к выходному файлу, как и любой другой объектный файл. –
(D) должен быть связан с (A) также, если для этого требуются символы из (A). (B) и (C) не содержат кода (A). Было бы иначе, если бы (B) и (C) вместо них были dlls/sos. –
Ваши первые два шага не имеют смысла. Статические библиотеки - это сборники модулей объектного кода; они не «связаны» с другими статическими библиотеками. Они просто «там». При построении (D) я не вижу, как только привязка (B) и (C) приведет к окончательной постановке. При вставке в статическую библиотеку, которая требует еще одного статического lib, ответственность за загрузчик (связывание исполняемого файла) заключается в заполнении пробелов (в этом случае также ссылка в (A)), которая должна рассказать вам что-то о сколько (A) находятся в вашей окончательной продукции. – WhozCraig