У меня есть функция в статической библиотеке, которая инициализирует статическую переменную с намерением, чтобы эта переменная инициализировалась только один раз:
Код: Выделить всё
static int getIndex() {
static int index = std::ios_base::xalloc();
return index;
}
Теперь эта статическая библиотека связана с основным исполняемым файлом и общей библиотекой, с которой связан исполняемый файл:
Код: Выделить всё
MyApp
- MyStaticLib
- MySharedLib
- MyStaticLib
Есть несколько вызовов getIndex(), как со стороны MyApp, так и со стороны MySharedLib. Теперь, когда я запускаю программу, в двух вызовах getIndex(), оба через MySharedLib, статическая переменная index однажды имеет значение 0, а в следующий раз — значение 1.
Насколько я понимаю, это невозможно. Так почему же переменная инициализируется дважды?
Если я скомпилирую MyStaticLib как общую библиотеку, проблема исчезнет, но я бы предпочел связать ее статически.
Кстати, я компилирую с помощью Clang 15.
Подробнее здесь:
https://stackoverflow.com/questions/786 ... ized-twice